1

我在我的 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();
}
4

0 回答 0