i have situation need add keyboard shortcuts application comprised of qtquick user interface. version of qt quick unfortunately locked qt5.3 , shortcuts (the way need them) introduced in qt5.5 , qt5.7 respectively.
so, solution, wrote event filter functions qshortcut (can't use qshortcut, hence event filter).
does know how install , use eventfilter in qml?
one way expose singleton type qml:
#include <qtgui> #include <qtqml> class shortcutlistener : public qobject { q_object public: shortcutlistener(qobject *parent = nullptr) : qobject(parent) { } q_invokable void listento(qobject *object) { if (!object) return; object->installeventfilter(this); } bool eventfilter(qobject *object, qevent *event) override { if (event->type() == qevent::keypress) { qkeyevent *keyevent = static_cast<qkeyevent*>(event); qdebug() << "key" << keyevent->key() << "pressed on" << object; return true; } return false; } }; static qobject *shortcutlistenerinstance(qqmlengine *, qjsengine *engine) { return new shortcutlistener(engine); } int main(int argc, char *argv[]) { qguiapplication app(argc, argv); qmlregistersingletontype<shortcutlistener>("app", 1, 0, "shortcutlistener", shortcutlistenerinstance); qqmlapplicationengine engine; engine.load(qurl(qstringliteral("qrc:/main.qml"))); return app.exec(); } #include "main.moc"
main.qml
:
import qtquick 2.5 import qtquick.window 2.2 import app 1.0 window { id: window width: 640 height: 480 visible: true component.oncompleted: shortcutlistener.listento(window) }
if have several different listeners, declaratively adding object
property shortcutlistener
install event filter on when set.
for more info, see integrating qml , c++.
Comments
Post a Comment