[英]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-25643
這似乎也與可能的解決方案/解決方法有關,但我沒有檢查它們。
關於QWidgets和“它們不是最好的解決方案”:首先,在未來的Qt 5.1(或者它將會是哪個版本)中使用完整的桌面Qt Quick組件,它們是常規桌面應用的唯一合理選擇,並且只有選項是定義最佳選項;)
但即使在未來,QWidgets也是Qt5應用的100%有效選擇。 與他們唯一相關的是,他們不太可能發展得太多,所以你現在所擁有的,是他們將要擁有的最好的。 如果那很好,那么他們就是選擇的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.