Я хочу создать приложение на C++, которое использует QML для диалогового интерфейса.Каков правильный способ сделать класс снаружи main.cpp для использования QtQuick2ApplicationViewer?
Я пытаюсь поставить мой код пользовательского интерфейса вне main.cpp, так что я могу потом отделить его запустить в потоке.
Я построю & run: ошибок в компиляции нет, ошибок в выходе приложения.
Однако на экране ничего не отображается. Но если написано в main.cpp, этот фрагмент кода правильно показывает диалог QML:
QtQuick2ApplicationViewer viewer;
viewer.setMainQmlFile(QStringLiteral("qml/Kiosk/main.qml"));
viewer.showExpanded();
Что я делаю:
Новый проект -> Приложения -> Qt Quick 2 (Application Встроения в элементах)
Я оставляю 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 и заменить кусок кода, который использует QtQuick2ApplicationViewer с QDeclarativeView:
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 в одном основном средстве просмотра. И для LAST time - вы не запускаете пользовательский интерфейс в любом потоке, кроме основного потока. – dtech