#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();
}