QT使用qt.conf文件来部署应用程序

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

您可以使用以下步骤来使用redis.conf文件部署Redis: 1. 首先,创建一个Redis容器并挂载redis.conf文件: ``` docker run --name redis \ -p 40002:6379 \ -v /usr/local/redis/conf:/data \ -v /usr/local/redis/conf:/usr/local/etc/redis \ -d redis:6.2.7 \ redis-server /usr/local/etc/redis/redis.conf ``` 2. 然后,更新容器的重启策略,以便容器在启动时自动重启: ``` docker update --restart=always redis ``` 这样就可以使用redis.conf文件部署Redis容器了。请注意,将redis.conf文件放在/usr/local/redis/conf目录下,并将该目录挂载到容器的/data和/usr/local/etc/redis目录中。另外,通过指定容器的名称和端口映射,可以访问Redis服务。在上述示例中,Redis将通过主机的40002端口进行访问。123 #### 引用[.reference_title] - *1* *2* [docker中redis.conf挂载配置文件无效](https://blog.csdn.net/L_1010_J/article/details/120941143)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] - *3* [Redis docker安装及redis.conf配置文件解析](https://blog.csdn.net/m0_70651612/article/details/124901394)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值