QML 中的事件过滤器
Event filter in QML
我必须通过 Qtcpsocket 发送 48 字节的数据 到控制器。我已经将字节中的每个 Bit 表示为 QML 中的按钮。所以每当用户单击按钮时,我必须将 对应的位 设置为 true/false 并立即发送 整个 48 字节的数据 .
我在这么多 QML 文件中有这么多按钮(位)。如何检测哪个按钮被按下并立即设置相应的Bit?如何在 qml 中获取对象?
我所做的是在按下按钮时在 Bit 中发出信号。现在很困惑如何将它传递到后端 C++ 到套接字,因为那样我会有很多信号。我觉得这不是正确的做法。任何聪明/更好的解决方案或类似的例子都是 helpful.Thanks
我不能完全理解你的代码你想做什么,但这个例子可能会有所帮助:
Byte.qml
import QtQuick 2.4
import QtQuick.Controls 1.2
Row {
id: block
property int number: 0
signal dataChanged()
Repeater {
model: 8
Button {
width: 20
height: 20
property int buttonIndex: index
text: buttonIndex
checkable: true
checked: false
onClicked: {
block.number = block.number ^ (1 << buttonIndex);
dataChanged();
}
}
}
}
main.qml
import QtQuick 2.4
import QtQuick.Window 2.0
Window {
id: win
width: 800
height: 600
Column {
id: numbers
property var bytes: []
anchors.centerIn: parent
Repeater {
model: 6
Byte {
property int byteIndex: index
Component.onCompleted: numbers.bytes[byteIndex] = 0;
onDataChanged: {
numbers.bytes[byteIndex] = number;
console.log(numbers.bytes);
}
}
}
}
}
我在这里用6个字节来提出这个想法。您所需要的只是将它发送到 C++,而不是将其打印到控制台。 Internet 上广泛描述了集成 QML 和 C++。您可以从 here
开始
我必须通过 Qtcpsocket 发送 48 字节的数据 到控制器。我已经将字节中的每个 Bit 表示为 QML 中的按钮。所以每当用户单击按钮时,我必须将 对应的位 设置为 true/false 并立即发送 整个 48 字节的数据 . 我在这么多 QML 文件中有这么多按钮(位)。如何检测哪个按钮被按下并立即设置相应的Bit?如何在 qml 中获取对象? 我所做的是在按下按钮时在 Bit 中发出信号。现在很困惑如何将它传递到后端 C++ 到套接字,因为那样我会有很多信号。我觉得这不是正确的做法。任何聪明/更好的解决方案或类似的例子都是 helpful.Thanks
我不能完全理解你的代码你想做什么,但这个例子可能会有所帮助:
Byte.qml
import QtQuick 2.4
import QtQuick.Controls 1.2
Row {
id: block
property int number: 0
signal dataChanged()
Repeater {
model: 8
Button {
width: 20
height: 20
property int buttonIndex: index
text: buttonIndex
checkable: true
checked: false
onClicked: {
block.number = block.number ^ (1 << buttonIndex);
dataChanged();
}
}
}
}
main.qml
import QtQuick 2.4
import QtQuick.Window 2.0
Window {
id: win
width: 800
height: 600
Column {
id: numbers
property var bytes: []
anchors.centerIn: parent
Repeater {
model: 6
Byte {
property int byteIndex: index
Component.onCompleted: numbers.bytes[byteIndex] = 0;
onDataChanged: {
numbers.bytes[byteIndex] = number;
console.log(numbers.bytes);
}
}
}
}
}
我在这里用6个字节来提出这个想法。您所需要的只是将它发送到 C++,而不是将其打印到控制台。 Internet 上广泛描述了集成 QML 和 C++。您可以从 here
开始