首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从qml keyPressEvent调用qt keyPressEvent(QKeyEvent * Keys.onPressed )

如何从qml keyPressEvent调用qt keyPressEvent(QKeyEvent * Keys.onPressed )
EN

Stack Overflow用户
提问于 2018-07-24 06:19:16
回答 1查看 1.5K关注 0票数 2

我有一个qml窗口,其中有一个

代码语言:javascript
复制
Keys.onPressed {
}  

我有一个c++类

代码语言:javascript
复制
protected:  
    void keyPressEvent(QKeyEvent *event);  

在Keys.onPressed里面需要做什么?我试过了

代码语言:javascript
复制
myclass.keyPressEvent(event)

我在我的keyPressEvent.类中尝试了一个公共Q_INVOKABLE函数(handleKeyPress),其中包含参数(QKeyEvent * event),我想从该参数调用handleKeyPress

在运行时,前者给出

"TypeError:对象myclass的属性'keyPressEvent‘不是函数“

后者

“错误:未知方法参数类型: QKeyEvent*”。

(然后我发现qml只能处理指向QObject的指针,而QKeyEvent并不继承QObject,但这无助于我找到解决方案。)

那么,从qml调用keyPressEvent的正确方法是什么呢?或者,如果这完全是错误的方法,那么如果我的类需要QKeyEvent可以给我的信息,那么正确的方法是什么呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-24 08:06:25

KeyEvent不是QKeyEvent *,而是从QObject继承并封装QKeyEvent的类,因此不能访问QKeyEvent,但您可以访问Q-属性,如下所示:

C++

代码语言:javascript
复制
protected:
    Q_INVOKABLE void someMethod(QObject *event){
        qDebug()<< "key" << event->property("key").toInt();
        qDebug()<< "text" << event->property("text").toString();
        qDebug()<< "modifiers" << event->property("modifiers").toInt();
        qDebug()<< "isAutoRepeat" << event->property("isAutoRepeat").toBool();
        qDebug()<< "count" << event->property("count").toInt();
        qDebug()<< "nativeScanCode" << event->property("nativeScanCode").value<quint32>();
        qDebug()<< "accepted" << event->property("accepted").toBool();
    }

QML:

代码语言:javascript
复制
Keys.onPressed: myclass_obj.someMethod(event)

但这是不建议的。您的类不应该直接知道事件,但最好的是处理QML中的逻辑和函数:

代码语言:javascript
复制
Keys.onPressed: {
    if(event.key === Qt.Key_A){
        myclass_obj.foo_A()
    }
    else if(event.key === Qt.Key_B){
        myclass_obj.foo_B()
    }
}

或者,如果您只想知道该密钥,则如下所示

C++

代码语言:javascript
复制
Q_INVOKABLE void someMethod(int key){
    qDebug()<< key;
}

QML

代码语言:javascript
复制
Keys.onPressed: myclass_obj.someMethod(event.key)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51491711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档