This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
后经查证是没有macdeployqt进行部署,程序内没有平台依赖库Plugins文件
Qt程序启动时会用QLibraryInfo类载入qt.conf文件, 按下面的路径顺序搜索 :
资源系统, :/qt/etc/qt.conf
Mac系统下会在资源目录, 例如:assistant.app/Contents/Resources/qt.conf
执行档所在目录,如:QCoreApplication::applicationDirPath()+QDir::seperator()+”qt.conf”
因此可以使用qt.conf文件引导查找路径
Qt--qt.conf
在qmake或qtcreator执行文件所在目录下都有一个qt.conf文件,这个文件是Qt5用来指定Qt库所在路径的,即使你安装了多个Qt库版本,也可以使用qt.conf来指定使用哪一个了。我们打包发布自己的程序时,也应使用qt.conf指定Qt库路径。
Qt帮助文档里已经介绍了qt.conf可以配置的项,下面我们从源码角度看下程序是如何读取这个文件的。
在qlibraryinfo.cpp文件中,我们可以发现这样一个类:
struct QLibrarySettings
{
QLibrarySettings();
void load();
QScopedPointer<QSettings> settings;
}
在QLibrarySettings构造函数中会调用load方法,load中会调用一个私有类的方法:
QSettings *QLibraryInfoPrivate::findConfiguration(){
QString qtconfig = QStringLiteral(":/qt/etc/qt.conf");
if (QFile::exists(qtconfig))
return new QSettings(qtconfig, QSettings::IniFormat);
if (QCoreApplication::instance()) {
QDir pwd(QCoreApplication::applicationDirPath());
qtconfig = pwd.filePath(QLatin1String("qt.conf"));
if (QFile::exists(qtconfig))
return new QSettings(qtconfig, QSettings::IniFormat);
}
return 0;
}
就是说她先会在qrc资源文件中寻找:/qt/etc/qt.conf,如果没有则在应用程序所在路径寻找qt.conf。这和Qt帮助文档中所说的一样。QSettings::IniFormat代表qt.conf是一个ini格式文件,解析的结果会保存在一个QSettings类中.
qt.conf中有许多可以配置的项,我们不必每个都设置,它有一个默认值,保存在一个key-value键值对结构体中:
static const struct {
char key[19], value[13];
} qtConfEntries[] = {
{ "Prefix", "." },
{ "Documentation", "doc" }, // should be ${Data}/doc
{ "Headers", "include" },
{ "Libraries", "lib" },
#ifdef Q_OS_WIN
{ "LibraryExecutables", "bin" },
#else
{ "LibraryExecutables", "libexec" }, // should be ${ArchData}/libexec
#endif
{ "Binaries", "bin" },
{ "Plugins", "plugins" }, // should be ${ArchData}/plugins
{ "Imports", "imports" }, // should be ${ArchData}/imports
{ "Qml2Imports", "qml" }, // should be ${ArchData}/qml
{ "ArchData", "." },
{ "Data", "." },
{ "Translations", "translations" }, // should be ${Data}/translations
{ "Examples", "examples" },
{ "Tests", "tests" },
#ifdef QT_BUILD_QMAKE
{ "Sysroot", "" },
{ "HostBinaries", "bin" },
{ "HostLibraries", "lib" },
{ "HostData", "." },
{ "TargetSpec", "" },
{ "HostSpec", "" },
{ "HostPrefix", "" },
#endif
};
这些项默认路径和我们安装或编译生成时路径是一致的,所以配置qt.conf时一般只用指定前缀目录即可,格式如下:
[Paths]
Prefix = /foo/bar
原文链接:https://blog.csdn.net/GG_SiMiDa/article/details/78528193
https://blog.csdn.net/sinat_38363122/article/details/119638084