Qt GUI程序封成动态库方式,供其他非Qt程序加载使用时,遇到一个GUI初始化并显示时,大概10s后程序崩溃的问题,调用栈显示崩溃在主线程的NSPersistentUIRequiresSecureCoding函数调用中,如下图所示:

经过排查以及互联网搜索,发现了Qt论坛上有人问到了类似问题:https://forum.qt.io/topic/159548/building-a-dll-on-macos-for-a-non-qt-application/7,原来Qt GUI在以库方式加载使用时,还要设置额外的初始化标识:
1 2 | QGuiApplication::setAttribute(Qt::AA_PluginApplication); QGuiApplication::setQuitOnLastWindowClosed( false ); |
主要是上面的Qt::AA_PluginApplication,看来Qt内部有针对这种plugin方式使用的特殊处理逻辑,加上这个attribute后,再次测试,就不再崩溃了。