我正在创建一款触摸屏游戏,需要 2-4 名玩家,每个玩家都可以使用一对 slider 控件。问题在于 QML Slider 控件将触摸作为鼠标事件进行响应并夺取焦点。那么一次只有一名玩家可以访问一个控件。我需要多个 slider 来同时响应触摸事件。我的问题是如何做到这一点?
在各种堆栈溢出帖子的帮助下,我已经能够创建自己的答案,到目前为止似乎可行。我在下面的答案部分详细说明了答案,以免像我这样的其他新手遇到麻烦。
最佳答案
这个问题有一个纯qml的解决方案。我的第一个答案中的 TouchSlider C++ 对象(本线程的其他位置)是不必要的。这里我修改了 TouchSlider qml 代码,以消除对 touchslider(TouchSlider C++ 对象)的引用。
TouchPoint.qml:
import QtQuick 2.0
import QtQuick 2.5
import QtQuick.Controls 1.4
import QtQuick.Layouts 1.2
Item {
property string sliderTitle
property real sliderMin
property real sliderMax
property real sliderVal
ColumnLayout{
id: column1
Label {
text: qsTr(sliderTitle)
font.pointSize: 10
}
Slider {
id: touchSlider1
minimumValue: sliderMin
maximumValue: sliderMax
orientation: Qt.Vertical
value: sliderVal
onValueChanged: function(){
sliderVal = Math.round(this.value);
labelSliderValue.text = qsTr(JSON.stringify(sliderVal));
}
}
Label {
id: labelSliderValue
text: qsTr(JSON.stringify(sliderVal))
font.pointSize: 10
}
function sliderSetValueFromTouch(position){
// Assume qs a vertical slider
var minvalue = touchSlider1.minimumValue;
var maxvalue = touchSlider1.maximumValue;
// Since this is a vertical slider, by assumption, get the height
var height = touchSlider1.height;
// Compute the new value based on position coordinate
var newvalue = (height-position)/height * (maxvalue-minvalue);
if (newvalue<minvalue) newvalue = minvalue;
if (newvalue>maxvalue) newvalue = maxvalue;
//qDebug() << newvalue;
// Set the value of the slider
touchSlider1.value = newvalue;
}
MultiPointTouchArea{
anchors.fill: touchSlider1
touchPoints: [
TouchPoint {
id: point1
onPressedChanged: function(){
if(pressed){
//console.log("pressed");
//console.log(touchslider.testStringReturn());
//touchslider.sliderSetValueFromTouch(touchSlider1,point1.y);
column1.sliderSetValueFromTouch(point1.y);
}
}
}
]
onTouchUpdated: function(){
//touchslider.sliderSetValueFromTouch(touchSlider1,point1.y);
column1.sliderSetValueFromTouch(point1.y);
}
}
}
}
touchslider.h 和 touchslider.cpp 文件没有增加任何值(value)。
关于c++ - Qt 创建对触摸事件敏感的 QML slider ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41419368/