在 QML 中访问 mouse.button 变量

Access mouse.button variable in QML

我正在尝试一些事情来加强我在 C++ 和 QML 方面的经验。

我有一个 MouseArea 项目。我想将“onPressed”、“onReleased”和“onPositionChanged”事件传递给后端我试图用 C++ 编写的那一面。实际上我想要这个干净简单的代码。我可以用QML来写我想做的事。

问题是我无法在 C++ 端定义 MouseArea 的“mouse.button”变量。我收到如下错误:

qrc:/main.qml:58: Error: Unknown method parameter type: Qt::MouseButton

我的 QML 脚本:

.
.
Item{
    id: item
    anchors.fill: parent

    Viewer{
        id: viewer
    }

    MouseArea{
        id: viewerMouseArea
        anchors.fill: parent
        hoverEnabled: true
        acceptedButtons: Qt.RightButton | Qt.LeftButton | Qt.MiddleButton

        onPressed: {
            //console.log("Mouse buttons in mouse area pressed.");
            viewer.mousePressEvent(mouseX, mouseY, mouse.button);
        }

        onReleased:{
            //console.log("Mouse buttons in mouse area released.")
            viewer.mouseReleaseEvent(mouseX, mouseY, mouse.button);
        }

        onPositionChanged:{
            //console.log("Position of cursor in mouse area changed.")
            //viewer.mouseMoveEvent(x, mouseY);
        }
    }
}
.
.

我的 C++ 后端代码:

.
.
void Viewer::mousePressEvent(double x, double y, Qt::MouseButton button) {
    qDebug() << "Viewer::mousePressEvent()";
}

void Viewer::mouseReleaseEvent(double x, double y, Qt::MouseButton button) {
    qDebug() << "Viewer::mouseReleaseEvent()";
}

void Viewer::mouseMoveEvent(double x, double y) {
    qDebug() << "Viewer::mouseMoveEvent()";
}
.
.

如何在 C++ 的 QML 中访问 mouse.button 变量?

我在这里查看了文档。 https://doc.qt.io/qt-6/qt.html#MouseButton-enum 我通过直接使用无符号整数解决了它。

void Viewer::mousePressEvent(double x, double y, quint32 button) {
    qDebug() << "Viewer::mousePressEvent()";

    qDebug() << "x: " << x << " y: " << y << " button: " << button;
}

void Viewer::mouseReleaseEvent(double x, double y, quint32 button) {
    qDebug() << "Viewer::mouseReleaseEvent()";

    qDebug() << "x: " << x << " y: " << y << " button: " << button;
}

void Viewer::mouseMoveEvent(double x, double y) {
    qDebug() << "Viewer::mouseMoveEvent()";
}

如果您有更好的解决方案建议,请告诉我。我将不胜感激。

控制台输出:

Viewer::mousePressEvent()
x:  243  y:  161  button:  2
Viewer::mouseReleaseEvent()
Viewer::mousePressEvent()
x:  282  y:  183  button:  1
Viewer::mouseReleaseEvent()
Viewer::mousePressEvent()
x:  277  y:  138  button:  4
Viewer::mouseReleaseEvent()