qt — QQuickView: обработка событий мыши в переполнении стека

Я рендерил свою 3d-модель в элементах управления qml, используя событие QQuickView :: beforeRendering.
Я хочу выполнять обработку событий мыши в C ++, если пользователь щелкает вне любого из элементов управления qml / Как я могу узнать в QQuickView :: mousePressEvent, что мышь нажимается вне элементов управления qml?

2

Решение

Я думаю, что проще сделать это с кастомом QQuickItemпотому что делать это с обычаем QQuickView очевидно означает, что вы получаете события до того, как они достигнут какого-либо из предметов.

Вот пример:

#include <QtQuick>

class MyItem : public QQuickItem
{
public:
MyItem() {
setAcceptedMouseButtons(Qt::AllButtons);
}

void mousePressEvent(QMouseEvent *event) {
QQuickItem::mousePressEvent(event);
qDebug() << event->pos();
}
};

int main(int argc, char** argv)
{
QGuiApplication app(argc, argv);

QQuickView *view = new QQuickView;
qmlRegisterType<MyItem>("Test", 1, 0, "MyItem");
view->setSource(QUrl::fromLocalFile("main.qml"));
view->show();

return app.exec();
}

Поместите пользовательский элемент внизу сцены, и он получит все необработанные события мыши:

import QtQuick 2.3
import QtQuick.Controls 1.0
import Test 1.0

Rectangle {
width: 400
height: 400
visible: true

MyItem {
anchors.fill: parent
}

Button {
x: 100
y: 100
text: "Button"}
}
2

Другие решения


По вопросам рекламы [email protected]