Я визуализирую свою 3D-модель под элементами управления qml, используя событие QQuickView::beforeRendering. Я хочу выполнять обработку событий мыши на С++, если пользователь щелкает за пределами любого из элементов управления qml. Как я могу узнать в QQuickView::mousePressEvent, что мышь нажата вне элементов управления qml?
QQuickView: обработка событий мыши в C++
Ответы (1)
Я думаю, что это проще сделать с пользовательским 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"
}
}
person
Mitch
schedule
13.04.2015