- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个带有项目的 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/
我正在编写一个简单的 GUI,它将在特定点打开一个 opencv 窗口。这个窗口有一些非常基本的 keyEvents 来控制它。我想通过一些功能来推进这一点。因为我的 QtGui 是我的 Contro
我无法理解 keyPressEvent 方法在该程序中的工作原理。具体来说,这里的“e”是什么? keyPressEvent 是使用预先存在的实例“e”重新定义的方法吗? import sys fro
我对 KeyPressEvent 有疑问, 我需要移动一个 QGraphicsItem播放器在我的场景中,但程序没有使用函数KeyPressEvent类game 文件“game.h”: #ifndef
我在QT上写作。 OpenGL 已连接,工作正常,但事件和 keyPressEvent mousePressEvent 不响应击键。 class MainWindow : public QGLWidg
我正在尝试在 Qt 上创建一个玩家可以沿对角线前进的游戏。所以当我按下 W 和 D 时,玩家可以转到右上角。但是,当我先按 W,然后按 D,然后松开 D 时,播放器不会朝 W 方向移动。事实上,按住
` from PyQt5.QtCore import Qt import sys from PyQt5.QtWidgets import QApplication, QMainWindow from
我想声明一个 com.google.gwt.event.dom.client.KeyPressEvent。它应该匹配任何字符或数字,以及 ,.-+~ 等符号。特别是我想排除所有“导航”键,如箭头、插入
我需要生成键盘输入,因为我有一个事件附加到此输入。我试着打电话: keyPressEvent(Qt::Key_Delete); 没有成功,有没有办法生成这个 keyPressEvent ? 最佳答案
我正在创建一个绘制颜色的程序,然后另一个类检查它们并在它们匹配时返回 true。整个代码都在一个对话框中。 colQ 是一个简单存储 RGB 值和其他东西的类;我们将使用这些来获取 RGB。 colD
我写了这段代码,但是我得到了这个错误: "left of '->key' must point to class/struct/union/generic type". 考虑到 GUI 是从 QWid
我有一个程序可以捕获单个按键,然后输出被按下的键。问题是,我无法返回按下的键的值,也无法让箭头键输出任何内容。这是我的代码: myApp.h class someClass: public QDial
我有一个主窗口,我在其中建立了标准的“编辑”>“剪切/复制/粘贴”操作,菜单操作链接到 QTextEdit 的相关插槽,它是主窗口的子窗口。 主窗口有一个不同的子窗口(在拆分器的另一侧),它显示一个
我从 PyQt GPL v5.4 创建一个 UI 并使用 pyuic5 将 *.ui 文件转换为 *.py 但我不知道 keyPressEvent 在这段代码中是如何工作的!! 它应该适用于 QWid
我有一个主要的 Widget 并且在这个主要的小部件里面我有 QListWidget 和两个按钮。我已经覆盖了主小部件内的 keyPressEvent(继承自 QWidget)。当焦点不在 QList
我有一个简单的表单,其中包含一些组合、标签、按钮和一个 QTextEdit。 我尝试使用 keyPressEvent 捕捉输入或返回键,但由于某些原因我无法捕捉。然而,我也使用的 ESC 键被识别。
当我按下按键时,此代码有效,但不适用于 Print Screen 键。 void KeyHooker::keyPressEvent(QKeyEvent *event) { qDebug() k
我想通过发送 KeyEvent 将字符附加到 QLineEdit。我正在使用这样的代码: ui.myEdit->setFocus(); for(size_t i = 0; i myEdit->setT
某些小部件将允许我这样做: self.widget.clicked.connect(on_click) 但是在做: self.widget.keyPressEvent.connect(on_key)
我正在尝试在 QT 中重写 QWidgets keyPressEvent 函数,但它只是行不通。我不得不说我是 CPP 的新手,但我知道 ObjC 和标准 C。 我的问题是这样的: class QSG
在我们的应用程序中,有一个用户控件,它允许输入一个数字(在 numericupdown 内),然后是一个 组合框,它允许选择 SI 前缀( [p, n, µ, m, -, k, M, G, T] 从小
我是一名优秀的程序员,十分优秀!