QGuiApplication::QGuiApplication 构造函数会传入程序启动的全部参数(argc,argv)
在构造函数中调用QGuiApplicationPrivate::init() (源代码: d_func()->init();)
在QGuiApplicationPrivate::init() 函数内部调用QGuiApplicationPrivate::createPlatformIntegration() (在这里会去获取环境变量QT_QPA_PLATFORM 的值作为平台插件的默认值,但是还是会从传入参数中获取,如果有存在-platform的参数,覆盖默认值)
然后调用
init_platform(QLatin1String(platformName), platformPluginPath, platformThemeName, argc, argv); 通过平台插件创建工厂创建
QPlatformIntegrationFactory::create(const QString &key, const QStringList ¶mList, int &argc, char **argv) (虚函数,默认调用下面个函数)
QPlatformIntegrationPlugin::create(key, paramList); (一般重写这个函数,而不去修改上面个函数,但看代码,重写上面个函数也可以)
到这里就调用到不同的平台插件的位置了,具体平台插件怎么实现就好明白了,在平台插件里面创建QPlatformIntegration对象。
QPlatformIntegration对象里面管理屏幕,窗口的最终创建来源,事件派发器,字体工厂,平台提供的服务等。