Qt5 Using QWidget with QtQuick2

Qt5 Using QWidget with QtQuick2

本文关键字:QtQuick2 with QWidget Using Qt5      更新时间:2023-10-16

qt5和qtquick2的组合存在一些问题。每当您想使用一些基于Qwidget的类别中的某些类,您首先在以下问题上运行:

您应该使用QApplication而不是QT5的QGuiApplication。好吧,这可以很大变化,对

所以现在我使用的是QApplication,但是每当我尝试使用基于QWidget的类时,我的程序崩溃或导致某些废话错误消息。

我应该如何使用QT5的旧Qwidgets?

P.S。我正在为所有平台开发我的应用程序。
我还使用自动生成的qtquick2applicationviewer类来渲染基于qtquick 2.0的应用程序。

在qt 5.1中(大概从现在开始)您应该使用qwidget :: createwindowcontainer。您的应用程序应该是基于Qwidget的应用程序,并将QML放入Qwidgets中。不支持将Qwidgets放入QML应用程序中。请参阅此博客条目。

如果您有一个表单类,并且要将QML放入容器小部件中。

如果您有此QML:

import QtQuick 2.0
Rectangle {
    property alias text: textItem.text
    width: 156
    height: 35
    Text {
        width: 150
        height: 20
        text: qsTr("Hello World")
        id: textItem
    }
}

在称为myqml.qml的文件中,然后将其路径放入资源文件的QML前缀。

然后放入构造函数:

ui->setupUi(this); // as normal
QQuickView* view = new QQuickView();
QWidget* widget = QWidget::createWindowContainer(view, ui->container);
view->setSource(QUrl("qrc:/qml/myqml.qml"));
if(view->status()!=QQuickView::Ready)
    qDebug("can't initialise view");
widget->setMinimumSize(500,100);
QQuickItem* container = view->rootObject();

然后,当您要与QML互动时:

container->setProperty("text", "Hello alternate universe");

这似乎是一个已知的错误:https://bugreports.qt.io/browse/qtbug-25643

似乎也有可能的解决方案/解决方案的链接,但我没有检查它们。

关于Qwidgets和"它们不是最好的解决方案":首先,直到将来的QT 5.1(或将来将是哪个版本)使用完整的桌面QT快速组件,它们是常规桌面应用程序的唯一明智选择根据定义,唯一的选项是最佳选择;)

,即使在将来的Qwidgets也是QT5应用程序的100%有效选择。唯一与他们在一起的是,它们不太可能发展太多,因此您现在拥有的是您与他们在一起的最好的。如果很好,那么它们是选择的解决方案。