Имитация ключей Нажмите в C ++ для использования в QML для виртуальной клавиатуры
-
21-12-2019 - |
Вопрос
Для моего приложения на основе 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
.
#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 Object - это как:
QKeyEvent *event = new QKeyEvent ( QEvent::KeyPress, Qt::Key_Enter, Qt::NoModifier);
QCoreApplication::postEvent (engine->rootObjects().first(), event);
.
Вы также можете взглянуть на Пример входной панели .Он показывает, как вводить текст в виджеты на панели входных данных, используя только клавиатуру указателя.
Другой - это VirtualKeyboard .Смотрите исходный код и измените его в соответствии с вашими потребностями.