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%有效选择。唯一与他们在一起的是,它们不太可能发展太多,因此您现在拥有的是您与他们在一起的最好的。如果很好,那么它们是选择的解决方案。