gpt4 book ai didi

c++ - 如何从 qml Keys.onPressed 调用 qt keyPressEvent(QKeyEvent *event)

转载 作者:太空宇宙 更新时间:2023-11-04 12:46:07 25 4
gpt4 key购买 nike

我有一个带有项目的 qml 窗口

Keys.onPressed {
}

我有一个 C++ 类,它有

protected:  
void keyPressEvent(QKeyEvent *event);

Keys.onPressed 中需要包含什么?我试过了

myclass.keyPressEvent(event)

并且我在我的 c++ 类中尝试了一个公共(public) Q_INVOKABLE 函数 (handleKeyPress),我想从中调用 keyPressEvent 参数 (QKeyEvent * event)。

在运行时前者给出

"TypeError: Property 'keyPressEvent' of object myclass is not a function"

后者

"Error: Unknown method parameter type: QKeyEvent*".

(然后我发现 qml 只能处理指向 QObject 的指针,而 QKeyEvent 不是从 QObject 继承的,但这对我找到解决方案没有帮助。)

那么从qml中调用keyPressEvent的正确方法是什么呢?或者,如果这完全是错误的方法,那么如果我的类需要 QKeyEvent 可以给我的信息(例如按下了哪个键等),那么正确的方法是什么?

最佳答案

KeyEvent不是一个QKeyEvent *,而是一个继承自QObject并封装了一个QKeyEvent的类,所以 QKeyEvent 无法访问,但您可以访问 q-properties,如下所示:

C++

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:

Keys.onPressed: myclass_obj.someMethod(event)

但不推荐这样做。你的类不应该直接知道事件,但最好的是你处理 QML 中的逻辑和函数:

Keys.onPressed: {
if(event.key === Qt.Key_A){
myclass_obj.foo_A()
}
else if(event.key === Qt.Key_B){
myclass_obj.foo_B()
}
}

或者如果你只想知道 key 可以如下

C++

Q_INVOKABLE void someMethod(int key){
qDebug()<< key;
}

QML

Keys.onPressed: myclass_obj.someMethod(event.key)

关于c++ - 如何从 qml Keys.onPressed 调用 qt keyPressEvent(QKeyEvent *event),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51491711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com