Как включить обработчики выбора текстового поля с помощью QtVirtualKeyboard в QQuickWidget?

#qt #qml #qtquick2 #qtvirtualkeyboard

#qt #qml #qtquick2 #qtvirtualkeyboard

Вопрос:

Я интегрирую QtVirtualKeyboard в свое приложение QML, и это приводит к появлению обработчиков выделения в текстовых полях при выборе некоторого текста, как показано ниже.

введите описание изображения здесь

Однако обработчики нельзя перетаскивать, если я интегрирую свое приложение QML с помощью QQuickWidget. Вместо этого он выводит сообщение об ошибке: QMetaObject::invokeMethod: No such method QQuickWidget::inputMethodQuery(Qt::InputMethodQuery,QVariant)

Вот минимальный воспроизводимый пример:

main.cpp:

 #include <QApplication>
#include <QQuickWidget>

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

    QApplication a(argc, argv);

    QQuickWidget quickWidget;
    quickWidget.setAttribute(Qt::WA_AcceptTouchEvents);
    quickWidget.setSource(QUrl("qrc:/main.qml"));
    quickWidget.show();

    return a.exec();
}
 

main.qml:

 import QtQuick 2.0
import QtQuick.Controls 2.0

Page {
    TextField {
        selectByMouse: true
    }
}
 

Обработчики работают просто отлично, если вместо этого я использую QQuickView, изменив main.cpp вот так:

 #include <QApplication>
#include <QQuickView>
#include <QWidget>

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

    QApplication a(argc, argv);

    QQuickView quickView;
    quickView.setSource(QUrl("qrc:/main.qml"));

    QWidget::createWindowContainer(amp;quickView)->show();

    return a.exec();
}