其实从最开始要学习和分析Qt的Demo时选定的就是calqlatr工程,但是打开源码一看,貌似难度高了点,这才有了上面的几篇基本控件的分析。从这一章开始,我要拿下calqlatr这个Demo项目了。
main.cpp
main.cpp中的代码非常简单:
#include "../../shared/shared.h"
DECLARATIVE_EXAMPLE_MAIN(demos/calqlatr/calqlatr)
DECLARATIVE_EXAMPLE_MAIN(NAME)是一个函数宏,其具体实现是在"../../shared/shared.h"头文件中。
其实在之前分析的Demo中也有使用到这个函数宏,只不过当时重点在分析QML代码上,没有对DECLARATIVE_EXAMPLE_MAIN(NAME)函数宏详细展开。这篇文章中就把它详细解开。
#define DECLARATIVE_EXAMPLE_MAIN(NAME) int main(int argc, char* argv[]) \
{\
QGuiApplication app(argc,argv);\
app.setOrganizationName("Qt Project");\
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(), SIGNAL(quit()), &app, SLOT(quit()));\
new QQmlFileSelector(view.engine(), &view);\
view.setSource(QUrl("qrc:///" #NAME ".qml")); \
view.setResizeMode(QQuickView::SizeRootObjectToView);\
if (QGuiApplication::platformName() == QLatin1String("qnx") || \
QGuiApplication::platformName() ==