• 2812阅读
  • 1回复

zhengtianzuo系列-Qml全局按键 [复制链接]

上一主题 下一主题
离线zhengtianzuo
 

只看楼主 倒序阅读 楼主  发表于: 2017-11-01
创建一个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")
    }
```



需要完整代码请访问 QtQuickExamples
博客地址: https://blog.csdn.net/zhengtianzuo06
Github: https://github.com/zhengtianzuo
个人产品: https://github.com/zhengtianzuo/Silk
产品网站: http://www.camelstudio.cn
离线liuchangyin

只看该作者 1楼 发表于: 2017-11-02
快速回复
限100 字节
 
上一个 下一个