在main.cpp之外创建一个类来使用QtQuick2ApplicationViewer的正确方法是什么?



我想制作一个使用QML作为对话框UI的c++应用程序。

我试图把我的UI代码外面main.cpp,这样我就可以以后分开它在一个线程中运行。

I build &run: No errors in compilation, No errors in application output.

然而,屏幕上什么也没有显示。但是如果用main.cpp来编写,这段代码就可以正确地显示QML对话框:

QtQuick2ApplicationViewer viewer;
viewer.setMainQmlFile(QStringLiteral("qml/Kiosk/main.qml"));
viewer.showExpanded();

我做什么:

新项目->应用程序-> Qt快速2应用程序(内置元素)

我留下main。Qml 原封不动

我添加了一个新的类"Dialog"

Dialog.h code:

#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和替换代码块使用QtQuick2ApplicationViewerQDeclarativeView:

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编程,所以任何帮助将高度赞赏。谢谢你。

在我自己寻找资源的时候遇到了这个问题。我想我可以说明一些你的问题,但我自己只是刚刚开始掌握QtQuick。

在你的Dialog::Show()方法中,你正在创建一个本地QtQuick2ApplicationViewer,当函数调用结束时,它将被销毁,因此你不会看到任何东西,因为它将立即返回。

也是我发现获得qml显示的最简单的方法是直接使用QQuickView。例如

int main(int argc, char** argv)
{
  QApplication app(argc, argv);
  QQuickView qtQuickApp;
  qtQuickApp.setSource(QUrl("test.qml"));
  qtQuickApp.show();

  app.connect( &app, SIGNAL( lastWindowClosed() ), &app, SLOT( quit() ) );
  app.exec();
  return 0;
} // main

相关内容

  • 没有找到相关文章

最新更新