在 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()
我正在尝试一些事情来加强我在 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()