簡體   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