我想製作一個使用QML作爲對話框UI的C++應用程序。在main.cpp之外使用QtQuick2ApplicationViewer來創建類的正確方法是什麼?
我試圖把我的UI代碼之外main.cpp中,這樣我以後可以分開它在一個線程中運行。
我編譯&運行:沒有編譯錯誤,應用程序輸出沒有錯誤。
但是,沒有在屏幕上顯示出來。但是,如果寫在main.cpp中,這個塊的代碼正確顯示QML對話框:
QtQuick2ApplicationViewer viewer;
viewer.setMainQmlFile(QStringLiteral("qml/Kiosk/main.qml"));
viewer.showExpanded();
我做什麼:
新建項目 - >應用程序 - > Qt Quick的2應用程序(內置in Elements)
我離開main.qml原樣。
我添加了一個新的類 「對話框」
Dialog.h代碼:
#ifndef DIALOG_H
#define DIALOG_H
#include <QObject>
#include "qtquick2applicationviewer.h"
class Dialog : public QObject
{
Q_OBJECT
public:
explicit Dialog(QObject *parent = 0);
void show();
signals:
public slots:
};
#endif // DIALOG_H
Dialog.cpp代碼:
#include "dialog.h"
Dialog::Dialog(QObject *parent) :
QObject(parent)
{
}
void Dialog::show()
{
QtQuick2ApplicationViewer viewer;
viewer.setMainQmlFile(QStringLiteral("qml/Kiosk/main.qml"));
viewer.showExpanded();
}
的main.cpp代碼:
#include <QtGui/QGuiApplication>
#include "dialog.h"
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
Dialog *dia = new Dialog();
dia->show();
return app.exec();
}
當切換回QtQuick 1.0並用QDeclarativeView替換的代碼,使用QtQuick2ApplicationViewer塊:
view = new QDeclarativeView();
view->rootContext()->setContextProperty("Dialog", this); //this
view->setSource(QUrl("qml/Kiosk/main.qml"));
view->setResizeMode(QDeclarativeView::SizeRootObjectToView);
我QML應用程序顯示正確。但我想用QtQuick 2.0。我是Qt編程新手,所以任何幫助將不勝感激。謝謝。
你這樣做是錯誤的。您不要簡單地將不同的小部件打開爲不同的qml查看器。您的對話框只需要作爲一個QML元素,與單個主查看器中的其他QML組件一起顯示。最後一次 - 你不會在任何線程中運行UI,而是在主線程中運行。 – dtech