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

标签 c++ qt qml qt5 virtual-keyboard

对于我基于 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);

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

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

关于c++ - 在 C++ 中模拟按键以在虚拟键盘的 QML 中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25053147/

相关文章:

qt - 部署 Qt Quick 演示应用程序 Minehunt 时出现全白屏幕

c++ - 构造一个 void 类型?

qt - 中继器接入元件

c++ - "Private memory"尽管对象被破坏,但捕获 bad_alloc 后未释放

具有大量 Windows 或复杂 UI 的 Qt 5 QML 应用程序

qt - 将资源添加到 QML 项目会导致编译速度非常慢

c++ - 根据IP和掩码打印所有IP C++

c++ - 使用 fork() 与 exec() 创建新进程

c++ - 反转或反向迭代 unordered_map

c++ - QMutex:销毁锁定的互斥体