在 C++ 中模拟按键以在虚拟键盘的 QML 中使用

Dar*_*lex 2 c++ qt virtual-keyboard qml qt5

对于我的基于 QML 的应用程序,我希望有一个虚拟键盘(Qt Enterprise 是个很有趣的东西,但 200 美元< 超出了我的能力),所以我决定编写自己的键盘。但我不太确定如何:

\n\n

这是我看到代码的方式:

\n\n

按键.h

\n\n
#ifndef KEYPRESS_H\n#define KEYPRESS_H\n\n#include <QObject>\n\nclass KeyPress : public QObject\n{\n\n    Q_OBJECT\n\npublic:\n    explicit KeyPress(QObject *parent = 0);\n\n    Q_INVOKABLE void virtKeyPress(const int& Char);\n\nsignals:\n    void virtKeyPressed(const int& source);\n\nprivate:\n    int vKey;\n};\n\n#endif // KEYPRESS_H\n
Run Code Online (Sandbox Code Playgroud)\n\n

按键.cpp

\n\n
#include "keypress.h"\n#include <QKeyEvent>\n\nKeyPress::KeyPress(QObject *parent) :\n    QObject(parent)\n{\n\n}\n\nvoid KeyPress::virtKeyPress(const int &Char){\n\n    vKey = Char;\n    QKeyEvent event(QEvent::KeyPress, vKey, Qt::NoModifier);\n    // Here I guess I should do somthing like "sendEvent(parent, &event);" or whatever, but nothing seems to work.\n    emit virtKeyPressed(vKey);\n\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我对如何在 qml 中实现这一点有一些想法,但是其中的乐趣在哪里。:)\n所以我想请求您对此主题的指导。\n顺便说一句,我\xe2\x80\x99已经在网上搜索了信息,但没有找到工作代码。

\n

Nej*_*jat 5

向 Qt Quick 对象发送按键事件如下:

QKeyEvent *event = new QKeyEvent ( QEvent::KeyPress, Qt::Key_Enter, Qt::NoModifier);
QCoreApplication::postEvent (engine->rootObjects().first(), event);
Run Code Online (Sandbox Code Playgroud)

您还可以查看输入面板示例。它展示了如何仅使用指针而不使用键盘通过输入面板将文本输入到小部件中。

另一种是虚拟键盘。查看源代码并更改它以满足您的需要。