我在我的 QML 应用程序中集成 QtVirtualKeyboard,这会导致选择处理程序在选择某些文本时出现在文本字段中,如下所示。
但是,如果我使用 QQuickWidget 集成我的 QML 应用程序,则处理程序不可拖动。相反,它会打印出一个错误:
QMetaObject::invokeMethod: No such method QQuickWidget::inputMethodQuery(Qt::InputMethodQuery,QVariant)
这是一个最小的可重现示例:
主.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(&quickView)->show();
return a.exec();
}