【发布时间】:2020-09-14 17:37:26
【问题描述】:
我正在使用 QML 实现自定义虚拟键盘。我的目的是在我单击虚拟键盘中的按钮时模拟真实键盘的物理按键信号。我已按照Qt Virtual Keyboard 中的教程进行操作,并成功构建并运行了示例代码。
问题是示例代码在 C++ 类中使用QCoreApplication::sendEvent() 函数将按键事件发送到焦点 QObject。当我在 main.qml 中导入 QtQuick.Controls 1.3 作为指南时效果很好,但是当我更改为 QtQuick.Controls 2.2,这在我的应用程序中是必不可少的。以下是示例代码的核心:
void KeyEmitter::emitKey(Qt::Key key)
{
QQuickItem* receiver = qobject_cast<QQuickItem*>(QGuiApplication::focusObject());
if(!receiver) {
return;
}
QKeyEvent pressEvent = QKeyEvent(QEvent::KeyPress, key, Qt::NoModifier, QKeySequence(key).toString());
QKeyEvent releaseEvent = QKeyEvent(QEvent::KeyRelease, key, Qt::NoModifier);
QCoreApplication::sendEvent(receiver, &pressEvent);
QCoreApplication::sendEvent(receiver, &releaseEvent);
}
那么如何将按键事件发送到我的应用程序?
【问题讨论】:
-
请更具体一些。使用 QML Controls 2 是否调用了您的 emitKey 方法?还是sendEvent没有效果?在 emitKey 方法的开头放置一个断点,看看会发生什么。
-
是的,已经调用了emitKey()方法,但是没有生效
标签: c++ qt qml signals-slots qtvirtualkeyboard