QML中的事件过滤器

时间:2015-06-16 20:06:52

标签: c++ qt mouseevent qml qt-quick

我必须通过Qtcpsocket向控制器发送 48字节数据。我在字节中将每个表示为QML中的按钮。因此,每当用户单击该按钮时,我必须将对应位设置为true / false并立即发送整个48字节的数据。 在这么多QML文件中我有很多按钮(Bits)。如何检测按下了哪个按钮并立即设置相应的位?如何在qml中获取对象? 我所做的是按下按钮时在Bit中发出信号。现在混淆了如何将它传递到后端c ++到套接字,因为那时我会有这么多的信号。我觉得这不是一个正确的方法。任何智能/更好的解决方案或类似的例子都会非常有用。谢谢

1 个答案:

答案 0 :(得分:1)

我不完全理解你的代码你想要做什么,但可能这个例子可以帮助:

<强> 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 ++而不是将其打印到控制台。在互联网上广泛描述了集成QML和c ++。您可以从here

开始