用c++模拟按键,用于QML虚拟键盘

Simulating key press in C++ for use in QML for virtual keyboard

本文关键字:用于 QML 虚拟 键盘 c++ 模拟      更新时间:2023-10-16

对于我基于QML的应用程序,我想有一个虚拟键盘(Qt Enterprise是这样一个玩笑,但200美元<超出了我的能力范围),所以我决定自己写一篇。但我不太确定如何:>

下面是我看到的代码:

keypress.h

#ifndef KEYPRESS_H
#define KEYPRESS_H
#include <QObject>
class KeyPress : public QObject
{
    Q_OBJECT
public:
    explicit KeyPress(QObject *parent = 0);
    Q_INVOKABLE void virtKeyPress(const int& Char);
signals:
    void virtKeyPressed(const int& source);
private:
    int vKey;
};
#endif // KEYPRESS_H

keypress.cpp

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

}
关于如何在qml中实现这一点,我有一些想法,但其中的乐趣在哪里。:)所以我想请你在这个问题上给予指导。顺便说一句,我已经在网上搜索了信息,但没有找到工作代码。

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

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

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

另一个是VirtualKeyboard。查看源代码并修改它以满足您的需要。