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