Qml全局按键

创建一个c++类 对事件进行监听

bool QmlKey::eventFilter(QObject *watched, QEvent *event)
{
    if (event->type() == QEvent::KeyPress)
    {
        QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
        if (keyEvent->key() == Qt::Key_Backspace)
        {
            emit sKeyBackPress();
            return(true);
        }
    }
    if (event->type() == QEvent::KeyRelease)
    {
        QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
        if (keyEvent->key() == Qt::Key_Backspace)
        {
            emit sKeyBackRelease();
            return(true);
        }
    }

    return QObject::eventFilter(watched, event);
}

注册并连接信号槽

QmlKey qmlKey;
    QQmlApplicationEngine engine;
    engine.rootContext()->setContextProperty("qmlKey", &qmlKey);
    engine.load(QUrl(QLatin1String("qrc:/main.qml")));
    QObject *root = engine.rootObjects()[0];
    root->installEventFilter(&qmlKey);
    QObject::connect(&qmlKey, SIGNAL(sKeyBackPress()), root, SLOT(onSKeyBackPress()));
    QObject::connect(&qmlKey, SIGNAL(sKeyBackRelease()), root, SLOT(onSKeyBackRelease()));

Qml中信号槽:

    function onSKeyBackPress(){
        label.text = qsTr("按下了Backspace")
    }

    function onSKeyBackRelease(){
        label.text = qsTr("松开了Backspace")
    }
show.gif

需要完整代码请访问QtQuickExamples

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 30,007评论 8 265
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,887评论 1 32
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,319评论 25 709
  • 天色欲晓醒来带着重生的喜悦侧耳倾听窗外吹拂的温柔的风 春和景明醉心做着钟爱的事蓦然回首却不期而遇了想念的人 夜深人...
    华之山阅读 1,801评论 3 3
  • 亲爱的小芝: 昨晚看了你的微信朋友圈动态,你的生活记录算是很满的了,让我对你有了外在的大概的初步了解。 同是双鱼座...
    幻岭之漫阅读 2,629评论 2 1

友情链接更多精彩内容