在官方樣本工程裡大多會看到這樣的代碼,沒有main啟動函數
#include "../../shared/shared.h"DECLARATIVE_EXAMPLE_MAIN(demos/stocqt/stocqt)
其實不是,DECLARATIVE_EXAMPLE_MAIN 封裝了啟動過程,看看這個宏定義
#include <QDir>#include <QGuiApplication>#include <QQmlEngine>#include <QQmlFileSelector>#include <QQuickView> //Not using QQmlApplicationEngine because many examples don't have a Window{}#define DECLARATIVE_EXAMPLE_MAIN(NAME) int main(int argc, char* argv[]) \{\ QGuiApplication app(argc,argv);\ app.setOrganizationName("QtProject");\ app.setOrganizationDomain("qt-project.org");\ app.setApplicationName(QFileInfo(app.applicationFilePath()).baseName());\ QQuickView view;\ if (qgetenv("QT_QUICK_CORE_PROFILE").toInt()) {\ QSurfaceFormat f = view.format();\ f.setProfile(QSurfaceFormat::CoreProfile);\ f.setVersion(4, 4);\ view.setFormat(f);\ }\ view.connect(view.engine(), &QQmlEngine::quit, &app, &QCoreApplication::quit);\ new QQmlFileSelector(view.engine(), &view);\ view.setSource(QUrl("qrc:///" #NAME ".qml")); \ if (view.status() == QQuickView::Error)\ return -1;\ view.setResizeMode(QQuickView::SizeRootObjectToView);\ if (QGuiApplication::platformName() == QLatin1String("qnx") || \ QGuiApplication::platformName() == QLatin1String("eglfs")) {\ view.showFullScreen();\ } else {\ view.show();\ }\ return app.exec();\}
可以看到裡面就是一個完整的啟動過程,qrc:///” #NAME “.qml” 這段代碼把demos/stocqt/stocqt組合為 qrc:///qmldemos/stocqt/stocqt.qml