QML 中的事件过滤器

Event filter in QML

我必须通过 Qtcpsocket 发送 48 字节的数据 到控制器。我已经将字节中的每个 Bit 表示为 QML 中的按钮。所以每当用户单击按钮时,我必须将 对应的位 设置为 true/false 并立即发送 整个 48 字节的数据 . 我在这么多 QML 文件中有这么多按钮(位)。如何检测哪个按钮被按下并立即设置相应的Bit?如何在 qml 中获取对象? 我所做的是在按下按钮时在 Bi​​t 中发出信号。现在很困惑如何将它传递到后端 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

开始