使用QQuickWidget运行QtVirtualKeyboard

时间:2017-06-22 14:07:07

标签: c++ qt qt5 qtvirtualkeyboard qquickwidget

我试图让QtVirtualKeyboard示例与QQuickWidget而不是QQuickView一起使用。对于QuickView,我使用以下main.cpp代码,这对我来说很好:

#include <QQuickView>
#include <QGuiApplication>
#include <QQmlEngine>

int main(int argc, char *argv[])
{
    qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard"));

    QGuiApplication app(argc, argv);

    QQuickView view(QString("qrc:/%2").arg(MAIN_QML));
    view.setResizeMode(QQuickView::SizeRootObjectToView);
    view.show();

    return app.exec();
}

当使用以下main.cpp实现更改为QQuickWidgets时遇到问题:

#include <QQuickWidget>
#include <QApplication>
#include <QQmlEngine>

int main(int argc, char *argv[])
{
    qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard"));

    QApplication app(argc, argv);

    QQuickWidget w(QString("qrc:/%2").arg(MAIN_QML));
    w.setResizeMode(QQuickWidget::SizeRootObjectToView);
    w.show();

    return app.exec();
}

当我点击输入字段时,虚拟键盘出现,但是当我开始在键盘上输入时,我收到消息“输入方法未设置”,这似乎与输入法插件有关。输入字段中不显示字符。 有任何想法吗? QML代码在main.cpp

的上述变体之间没有变化

BTW:我使用的是Linux,gcc,Qt 5.9.0,EGLFS插件

感谢您的任何建议!

此致 帕特里克

1 个答案:

答案 0 :(得分:1)

找到了inputMethod documentation的QML解决方案。以下变通办法对我有效:

TextArea {
    ...
    onActiveFocusChanged: {
        if(activeFocus) {
            Qt.inputMethod.update(Qt.ImQueryInput)
        }
    }
}

也可以与其他控件一起使用。

当然InputPanel应该在ApplicationWindow中定义,如下所示:

ApplicationWindow {
...
    InputPanel {
        id: inputPanel
        ...
    }
}