【发布时间】:2019-12-11 23:32:55
【问题描述】:
我正在使用 PyQt5 和 QML 来创建一个应用程序。我需要能够模拟从 PyQT 到我的 QML 对象或从 QML 本身的键盘板事件。
我正在使用 QQmlApplicationEngine 来加载我的 QML,并且我正在使用 Python 中的“后端”QObject 来连接到 QML 中的信号和插槽。
app = QGuiApplication(sys.argv)
engine = QQmlApplicationEngine()
backend = Backend()
engine.rootContext().setContextProperty("backend", backend)
engine.load('./qml/main.qml')
app.setEngine(engine)
稍后我尝试发送一个关键事件:
app.sendEvent(engine.rootObjects()[0].focusObject(), QKeyEvent(QEvent.KeyRelease, Qt.Key_Down, Qt.NoModifier))
在我的 QML 中,我有一个具有焦点的列表视图。如果我按键盘上的向上和向下键,列表中的焦点项目会按预期更改。但是,当我尝试使用上面的代码发送按键事件时,列表视图没有反应。
engine.rootObjects()[0] 在打印时是一个 QObject。
QML sn-p:
ApplicationWindow {
// list model here
// list delegate here
ListView {
id: menuView
anchors.fill: parent
focus: true
model: menuModel
delegate: menuDelegate
keyNavigationEnabled: true
keyNavigationWraps: true
}
}
另外,我想知道是否可以通过与 ApplicationWindow 对象的 activeFocusItem 交互从 QML 自身内部生成一个关键事件?我也无法让它工作。
【问题讨论】:
标签: python pyqt qml pyqt5 keyevent