繁体   English   中英

Qt5将QWidget与QtQuick2一起使用

[英]Qt5 Using QWidget with QtQuick2

Qt5和QtQuick2的组合存在一些问题。 每当您想要使用许多基于QWidget的类中的一些时,您首先遇到以下问题:

您应该使用QApplication而不是Qt5的QGuiApplication 嗯,这很容易改变,对吧?

所以现在我正在使用QApplication但每当我尝试使用基于QWidget的类时,我的程序会崩溃或导致一些无意义的错误消息。

那么我应该如何在Qt5中使用旧的QWidgets呢? 我知道它们不是Qt5的最佳解决方案,但它们非常有用......

PS我正在Linux中为所有平台开发我的应用程序。
我还使用自动生成的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-25​​643

这似乎也与可能的解决方案/解决方法有关,但我没有检查它们。

关于QWidgets和“它们不是最好的解决方案”:首先,在未来的Qt 5.1(或者它将会是哪个版本)中使用完整的桌面Qt Quick组件,它们是常规桌面应用的唯一合理选择,并且只有选项是定义最佳选项;)

但即使在未来,QWidgets也是Qt5应用的100%有效选择。 与他们唯一相关的是,他们不太可能发展得太多,所以你现在所拥有的,是他们将要拥有的最好的。 如果那很好,那么他们就是选择的解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM