在C ++中模拟按键,用于虚拟键盘的QML

时间:2014-07-31 07:31:05

标签: 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中实现这一点的想法,但是那里的乐趣在哪里。 :) 所以我想请你就这个问题提供指导。 顺便说一句,我在网上搜索了信息,但没有找到合适的代码。

1 个答案:

答案 0 :(得分:3)

将关键事件发送到Qt Quick对象就像:

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

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

另一个是VirtualKeyboard。查看源代码并根据需要进行更改。