C++ 使用QQuickWidget运行QtVirtualKeyboard

C++ 使用QQuickWidget运行QtVirtualKeyboard,c++,qt,qt5,qtvirtualkeyboard,qquickwidget,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", QByteA

我试图使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();
}
#包括
#包括
#包括
int main(int argc,char*argv[])
{
qputenv(“QT_IM_模块”,QByteArray(“qtvirtualkeyboard”);
QGUI应用程序应用程序(argc、argv);
QQuickView视图(QString(“qrc:/%2”).arg(MAIN_QML));
setResizeMode(QQuickView::SizerootObject-view);
view.show();
返回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();
}
#包括
#包括
#包括
int main(int argc,char*argv[])
{
qputenv(“QT_IM_模块”,QByteArray(“qtvirtualkeyboard”);
QApplication应用程序(argc、argv);
QQuickWidget w(QString(“qrc:/%2”).arg(MAIN_QML));
w、 setResizeMode(QQuickWidget::SizeRootObjectToView);
w、 show();
返回app.exec();
}
当我点击输入字段时,虚拟键盘会显示出来,但当我开始在键盘上输入时,我会收到消息“input method is not set”(输入法未设置),这似乎与输入法插件有关。输入字段中不显示字符。 有什么想法吗?QML代码在main.cpp的上述变体之间没有更改

顺便说一句:我正在使用Linux、gcc、Qt5.9.0、EGLFS插件

谢谢你的建议

问候,,
Patrick找到了QML的解决方案。以下变通方法适合我:

TextArea {
    ...
    onActiveFocusChanged: {
        if(activeFocus) {
            Qt.inputMethod.update(Qt.ImQueryInput)
        }
    }
}
也可以与其他控件一起使用

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

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

我做了一些进一步的测试,同样的代码适用于Qt5.8.0,但在5.9.0上失败了非常奇怪的错误:我在5.12.x中使用了虚拟键盘,然后意外地开始出现这些奇怪的错误:
输入法未设置
。如何修复此问题有任何更新吗?