[SOLVED] mousePressEvent in QtQuickView
-
main.qml:
import QtQuick 2.12 import QtQuick.Window 2.12 import QuickTypes 1.0 MouseItem { visible: true width: 640 height: 480 title: qsTr("Mouse Item test") }
main.cpp:
#include <QGuiApplication> #include <QQmlApplicationEngine> #include <mouseitem.h> int main(int argc, char *argv[]) { QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QGuiApplication app(argc, argv); qmlRegisterType<MouseItem>("QuickTypes",1,0,"MouseItem"); QQmlApplicationEngine engine; const QUrl url(QStringLiteral("qrc:/main.qml")); QObject::connect(&engine, &QQmlApplicationEngine::objectCreated, &app, [url](QObject *obj, const QUrl &objUrl) { if (!obj && url == objUrl) QCoreApplication::exit(-1); }, Qt::QueuedConnection); engine.load(url); return app.exec(); }
mouseitem.h:
#ifndef MOUSEITEM_H #define MOUSEITEM_H #include <QQuickView> class MouseItem : public QQuickView { Q_OBJECT public: MouseItem(); protected: void mousePressEvent(QMouseEvent *e) override; }; #endif // MOUSEITEM_H
mouseitem.cpp:
#include "mouseitem.h" #include <QDebug> MouseItem::MouseItem() : QQuickView() { } void MouseItem::mousePressEvent(QMouseEvent *e) { // qApp->sendEvent(mWindow, e); qDebug() << "mousePressEvent"; if (!e->isAccepted()) { qDebug("Hello"); QQuickView::mousePressEvent(e); } }
I see the text "mousePressEvent", but I don't see the hello. So the events are happening.
-
TBH, I did your method without
!e->isAccepted()
too, it didn't work
now it works now, evenvoid MouseItem::mousePressEvent(QMouseEvent *e) { qDebug() << "mousePressEvent"; qDebug("mousePressEvent"); }
don't understand
but there is another problem that it works, and print the message when click on the window, but it freezes the qml controllers
this is weird.
will test other events and will leave comment if there is any problem -
-
This is the more specific question about the
mousePressEvent
problem
https://forum.qt.io/topic/113640/why-q-window-events-are-eaten-by-qml-item -
Have you tried doing your opengl in a qtquickitem? I wonder if the problem is trying to embed a top level window inside a a qml item.
-
The problem is solved
please check this
https://forum.qt.io/topic/113640/solved-why-q-window-events-are-eaten-by-qml-itemthanks