QLibraryInfo、qt.conf用法及关系总结

qmake运行时依赖的配置文件集 qmake.conf、.qmake.conf、.qmake.stash、.qmake.super、.qmake.cache文件 qt qmake 配置文件 qmake.conf .qmake.conf .qmake.stash .qmake.super .qmake.cache qt_build_paths.prf 阅读详情

1.QLibraryInfo说明

Qt中有个类为QLibraryInfo,Qt官方对其解释如下:

Detailed Description

Many pieces of information are established when Qt is configured and built. This class provides an abstraction for accessing that information. By using the static functions of this class, an application can obtain information about the instance of the Qt library which the application is using at run-time.

You can also use a qt.conf file to override the hard-coded paths that are compiled into the Qt library. For more information, see the Using qt.conf documentation.

See also QSysInfo and Using qt.conf.

中文的意思是:当Qt被构建和配置的时候,很多片段化的信息被建立。 QLibraryInfo类提供访问这些片段化信息的抽象访问接口。通过调用QLibraryInfo类的一些静态函数,应用程序能获取其在运行时用到的一些Qt相关库的信息。你能够用qt.conf文件去改变那些编译到Qt库中的硬编码路径。

下面详细说明:

当安装Qt时,Qt的一些目录路径会被内建到QLibraryInfo类。如下为Qt在Windows下安装后的目录:

                                                                       图1 

 在某些需求、某些情况下,需要获取这些目录路径,如:需要知道Qt的可执行文件、dll所在目录C:\Qt\Qt5.14.1\5.14.1\msvc2017_64\bin,此时就可以通过QLibraryInfo类获取。QLibraryInfo类提供了QLibraryInfo::LibraryLocation枚举,对应上图中的目录,如下:

枚举名枚举值含义

QLibraryInfo::PrefixPath

0所有路径的默认前缀

QLibraryInfo::DocumentationPath

1安装路径中文档位置

QLibraryInfo::HeadersPath

2头文件位置

QLibraryInfo::LibrariesPath

3库的安装位置

QLibraryInfo::LibraryExecutablesPath

4库在运行时所需的已安装可执行文件的位置

QLibraryInfo::BinariesPath

5Qt二进制文件(工具和应用程序)安装位置

QLibraryInfo::PluginsPath

6Qt插件位置

QLibraryInfo::ImportsPath

7QML扩展用于导入的安装位置(QML 1.x)。

QLibraryInfo::Qml2ImportsPath

8QML扩展用于导入的安装位置(QML 2.x)。

QLibraryInfo::ArchDataPath

9通用的、和操作系统有关的Qt数据位置

QLibraryInfo::DataPath

10通用的、和操作系统无关的Qt数据位置

QLibraryInfo::TranslationsPath

11Qt字符串翻译信息的位置

QLibraryInfo::ExamplesPath

12位于安装目录下,Qt例子位置。

QLibraryInfo::TestsPath

13Qt安装目录下测试用例位置

QLibraryInfo::SettingsPath

100Qt设置位置,在Windows下不起作用,无意义。

                                                           表1 

通过QLibraryInfo::location方法可获取上述枚举表示值的字符串路径。QLibraryInfo::location定义如下:

[static] QString QLibraryInfo::location(QLibraryInfo::LibraryLocation loc)

例如,可以用如下代码打印出上述枚举:

#include <QCoreApplication> 
#include<QLibraryInfo>
#include<QDebug>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    for (auto nType = 0; nType <= 13; ++nType)
    {
        auto libLocal = static_cast<QLibraryInfo::LibraryLocation>(nType);
        qDebug() << QLibraryInfo::location(libLocal) << "\n";
    }
     
    // 最后一个
    qDebug() << QLibraryInfo::location(QLibraryInfo::SettingsPath) << "\n";
        
    return a.exec();
}

我本机操作系统是Windows 11,在我本机输出结果如下:

 可以看到:QLibraryInfo::LibraryExecutablesPath和QLibraryInfo::BinariesPath在我本机表示的目录相同;QLibraryInfo::PrefixPath、QLibraryInfo::ArchDataPath、QLibraryInfo::DataPath在我本机表示的目录也相同。

2.qt.conf

   2.1.位置及格式

    qt.conf是一个ini格式的文件。QLibraryInfo将会从以下3个位置加载qt.conf文件:

  1. 利用Qt的资源系统从资源文件:/qt/etc/qt.conf处加载。
  2. 对于macOS,则是位于资源目录下的应用程序簇中。例如:
    app/Contents/Resources/qt.conf。
  3. 包含应用程序的目录,例如:
     QCoreApplication::applicationDirPath() + QDir::separator() + "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
};

   2.2 覆盖路径

     qt.conf文件能用来覆盖编译到Qt库中的硬编码路径,也就是1节提到的通过QLibraryInfo::location和QLibraryInfo::LibraryLocation获取到的路径。如果qt.conf中设置了这些路径,则通过QLibraryInfo::location和QLibraryInfo::LibraryLocation获取到的路径将不再是Qt安装时的默认路径,而是qt.conf中设置的这些路径。这在某些情况下会非常有用,如:如果没有qt.conf文件,则Qt库将会用默认硬编码路径去查找插件、翻译文件等路径,这些目录路径在某些目标系统上可能不存在或不能访问,在这种情况下,可以通过在qt.conf文件设置路径,让Qt从qt.conf设置的路径搜索。

      qt.conf文件由路径组构成。每个组对应QLibraryInfo::LibraryLocation枚举即表1中的一个枚举值,如下:

节点值

Prefix

QCoreApplication::applicationDirPath()

Documentation

doc

Headers

include

Libraries

lib

LibraryExecutables

libexec

Binaries

bin

Plugins

plugins

Imports

imports

Qml2Imports

qml

ArchData

.

Data

.

Translations

translations

Examples

examples

Tests

tests

Settings

.

                                                         表2 

绝对路径被用于qt.conf文件,即qt.conf文件中Prefix节点是绝对路径,所有其它路径可以用个相对于Prefix节点的相对路径表示,当然也可以用绝对路径表示。在Windows 、 X11上,Prefix是相对于包含应用程序可执行文件所在目录(QCoreApplication::applicationDirPath()返回的目录)。在macOS,Prefix是相对于位于资源目录下的应用程序簇中。例如:application.app/Contents/plugins/   是默认的加载Qt插件的目录。例如:qt.conf文件可能像下面那样:

 [Paths]
  Prefix = /some/path
  Translations = i18n

注意:\ 字符在Windows平台的ini文件被当做特殊字符,推荐用/;如果非用\不可,则用\\进行转义。

2.3.配置参数到平台插件

qt.conf包含Platforms组节点,其键是逗号分割的参数列表,这些参数会被传入平台插件。键的名称是平台插件名,键名第一个字母大写,后面跟随参数,如:

 [Platforms]
  WindowsArguments = fontengine=freetype

将会引起Windows平台插件用freetype字体引擎。

3.为何需要qt.conf?

    在2.2节提到qt.conf文件的作用。下面举一个应用场景:

我们打包自己开发的应用程序给客户时,一般要将Qt的plugins目录放在可执行程序的同一目录下进行打包,如下:

       Qt的plugins目录存放了Qt自己的插件和自己开发的插件,如果该目录不打入包里面,可执行文件运行时会报错,缺少plugins目录的包在运行主程序时,典型的报错如下:

       由于某些原因,在将自己开发出的应用程序打包给客户时, Qt的plugins目录或2.2节表2提到的目录,不能和主程序放在同一目录下或者开发者想要放到自己设定的目录中,此时,可以在qt.conf中更改插件或其它目录路径。如下为更改plugins目录后的qt.conf文件内容:

  可以看到主程序放到D:\QGIS\build\output\bin\Release目录下,而插件目录放到C:/Users/dansh/Desktop/plugins目录,在编辑好qt.conf文件后,将qt.conf放到主程序目录下即可(本例指D:\QGIS\build\output\bin\Release)。如果不在qt.conf文件配置表2中提到的相关目录路径且主程序同一目录下,又搜索不到表2提到的相关目录路径,则主程序会报错或某些功能会缺失。


参考链接:https://blog.youkuaiyun.com/GG_SiMiDa/article/details/78528193

QT使用qt.conf文件来部署应用程序 后经查证是没有macdeployqt进行部署,程序内没有平台依赖库Plugins文件Qt程序启动时会用QLibraryInfo类载入qt.conf文件, 按下面的路径顺序搜索 :资源系统, :/qt/etc/qt.confMac系统下会在资源目录, 例如:assistant.app/Contents/Resources/qt.conf执行档所在目录,如:QCoreApplication::applicationDirPath()+QDir::seperator()+”qt.conf” 阅读详情

相关推荐

QT小技巧

1、如果在窗体关闭前自行判断是否可关闭 答:重新实现这个窗体的 closeEvent()函数,加入判断操作 void MainWindow::closeEvent(QCloseEvent *event) { if (maybeSave()) { writeSettings(); event->accept(); } else { event->ignore(); } } 2、如何用打开和保存文件对话框 答:使用QFileDialog QString file

我不是码农的博客~~~ 972

qt获取qt.conf 中内容过程 QLibraryInfo

qt.conf

qiushangren的专栏 3925

【电力电子控制】基于强化学习的单相逆变器并网电流控制

本文将尝试以 DQN(Deep Q-Network)为例,设计并训练一个面向单相逆变器的智能控制器,实现对并网电流的精准调节。

weixin_62596197的博客 463

Qt--qt.conf

Qt5使用qt.conf来设置Qt的路径在qlibraryinfo.cpp文件中,我们可以发现这样一个类:struct QLibrarySettings { QLibrarySettings(); void load(); QScopedPointer<QSettings> settings; }在QLibrarySettings构造函数中会调用load方法,load中会调用一

HW的博客 1万+

Circos图审美拯救计划:用TBtools复刻Nature级共线性分析图谱

本文针对Circos图在共线性分析中的审美提升问题,提供了一套基于TBtools的完整优化方案。通过构建和谐的色彩体系、精细控制信息层布局以及模仿顶刊构图逻辑,详细讲解了如何从配色、透明度、标签显示到高级参数设置,将默认图表升级为具有高级学术美感的Nature级图谱,助力研究者提升论文图表质量。

cherry的博客 911

ArcGIS:根据DEM数据提取区域水系

利用DEM数据提取区域水系是常见的水文分析应用,为了获取区域的矢量水系数据,我们可以通过ArcGIS对高程DEM数据进行水文分析,为地表水流建立模型,进而获取到该地的水系数据,DEM数据精度越高,获取到的水系数据精度也就越高。以下介绍如何用ArcGIS提供的工具提取水系。

Oruizn的博客 9109

qt.conf

QLibraryInfo、qt.conf用法及关系总结-优快云博客

jijie_ming的博客 609

STM32CUBEMX 使用教程5 — DMA配置 & 串口结合DMA实现数据搬运

DMA(Direct Memory Access),直接存储器访问(或数据搬运),是STM32中很实用的一个外设。DMA 传输数据方式不需要 CPU 参与控制传输,也不用中断处理的方式进行数据搬运处理,纯粹通过硬件为 RAM 与 I/O 设备之间开辟一条直接传送数据的通路,使 CPU 的效率大大提高。

weixin_43866583的博客 1500

qt QLibraryInfo

如果qt.conf中设置了这些路径,则通过QLibraryInfo::location和QLibraryInfo::LibraryLocation获取到的路径将不再是Qt安装时的默认路径,而是qt.conf中设置的这些路径。这在某些情况下会非常有用,如:如果没有qt.conf文件,则Qt库将会用默认硬编码路径去查找插件、翻译文件等路径,这些目录路径在某些目标系统上可能不存在或不能访问,在这种情况下,可以通过在qt.conf文件设置路径,让Qt从qt.conf设置的路径搜索。qt.conf文件由路径组构成。

jijie_ming的博客 1311

基于MUSIC算法的DOA估计Matlab仿真

特别需要指出的是:通道与阵元并不是一一对应,通道是由空间的一个、几个或所有阵元合成的,当然空间某个特定的阵元可包含在不同的通道内。空间谱估计侧重于研究空间多传感器阵列所构成的处理系统对感兴趣的空间信号的多种参数进行准确估计的能力,其主要目的是估计信号的空域参数或信源位置,这也是雷达、通信、声纳等许多领域的重要任务之一。从系统框图中可以清晰的看出,估计空间相当于是对目标空间的一个重构过程,这个重构的精度由众多因素决定,如环境的复杂性、空间阵元的互耦、通道不一致、频带不一致等。

FPGA/MATLAB学习教程/源码/项目合作开发 1747

Python在振动信号处理中的应用(一):振动信号消除多项式趋势项

文章目录一、概述二、最小二乘法去除趋势项原理三、python模块介绍3.1 scikitlearn简介(1)转化器(Transformer)(2)估计器(Estimator)3.2 线性回归LinearRegression3.3 多项式PolynomialFeatures3.4 工作流Pipeline四、python代码实现4.1 构造模拟信号4.2 编写去除趋势项主代码4.3 展示算法效果五、TIPS 一、概述   在振动测试过程中,传感器或采集设备由于自身性能问题或受环境干扰(如温度、供电等影响),容易

白银时代的博客 8578

QLibraryInfo:Qt 运行时环境的基石

摘要:QLibraryInfo 是 Qt 框架中管理运行时环境的核心组件,负责解析 Qt 库的安装路径和资源配置。它通过 qt.conf 文件实现动态路径覆盖,解决了硬编码路径带来的部署问题,使应用程序具备可重定位性。QLibraryInfo 提供路径查询接口(如 path() 和 paths())以及构建信息检查功能(如版本号、调试模式等)。其与 QCoreApplication 的启动顺序紧密相关,确保在部署时正确加载插件、翻译文件等关键资源。

greenspan的专栏 812

C# WPF上位机实战:从零开发空压机监控系统(含实时监控+故障预警+数据追溯)

在工业生产场景中,空压机作为核心动力设备,常面临这些痛点:压力/温度异常导致停机、油耗超标未及时发现、设备故障追溯无数据支撑、人工巡检效率低且易遗漏。而基于C# WPF开发的空压机监控系统,能通过实时采集设备运行参数、智能分析运行状态、联动故障预警,实现“状态监控-异常告警-数据追溯-远程管控”全流程自动化,完美解决传统管理模式的弊端。今天就带大家落地这套空压机监控系统,基于C# + .NET 8 + WPF + Modbus TCP/RTU协议,整合压力、温度、油耗、运行时长等核心参数监控,搭配WPF的数

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1104

配置Qt 运行的设定:qt.conf 和 qtconfig (***)

配置Qt 运行的设定:qt.conf 和 qtconfig

ken2232的博客 2409

Pointnet++改进91:2025最新改进模块-RepMBConv模块

本文提出了一种改进PointNet++网络的方法,通过在特征提取模块中引入RepMBConv结构来提升模型性能。主要内容包括:1)理论部分介绍了RepMBConv的设计原理,包含自监督学习框架、动态上下文建模等创新点;2)详细给出了三步修改步骤:创建包含RepMBConv的Python模块、在pointnet2_utils.py中添加注意力机制、修改pointnet2_sem_seg.py主网络结构;3)代码实现展示了如何将RepMBConv集成到PointNetSetAbstraction模块中,形成Po

AIcurator的博客 275

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

QLibraryInfo

读取 qt.conf 文件, 获取 Qt Library 的信息。 通常会在以下三个路径查找conf文件: :/qt/etc/qt.conf(使用资源系统时) OS X中, 在应用程序目录下的 Resource目录。 应用程序可执行文件所在目录 QLibraryInfo优先读取conf文件,如果没有q...

weixin_30621959的博客 635

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

用qt.conf和qtconfig配置Qt运行设定

一个重要的Qt配置文件qt.conf, 这里就讲讲关于这个文件的前世今生。 (本文部分内容出自Qt文档 Using qt.conf) 经常有人写Qt程序里头用到Qt的插件,有时忘记把插件与程序一起发布,有时是不喜欢Qt预设的插件默认路径, 导致程序找不到插件。 遇到这种情况先看看那篇打包发布的文章, 默认情况下Qt运行需要的各种路径都写死在Qt库里, 如果实在不喜欢Qt的插件路径就

天好蓝 1万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Qt 报错qt.qpa.plugin: Could not find the Qt platform plugin “xcb“ in ““【已解决】

摘要:本文解决Qt程序在Linux系统报错Could not find the Qt platform plugin 'xcb'的问题。该错误通常是由于缺少平台插件或路径配置不当导致。解决方案包括:1)设置环境变量指向正确的插件路径;2)使用qt.conf文件配置插件路径,特别推荐此方法。文章详细介绍了qt.conf文件的作用、存放位置及配置参数,并指出在linuxdeployqt打包时可能会自动生成该文件。通过合理配置路径,可确保Qt程序正确加载所需的平台插件。

做减求空 791

Qt 插件路径

Qt Manual 已经专门介绍了Deploying Plugins 的问题。半年前Qt 插件学习(一) 也简单整理了一点路径相关的问题。 可是,一直以来没理清:图片插件、编解码插件、数据库插件... 到底是如何被加载的? 走马观花 如果我们需要打开或保存一个jpg格式的图片,那么需要加载jpg的插件。程序去何处找插件: 表面的答案: $QTDIR/plugins/i

波波诸葛伟 3034

qt生成的exe到指定路径加载DLL文件

        qt编译生成的exe程序在打包依赖文件后,如果同时又有其他dll文件时,目录会看起来非常杂乱。我们可以通过将依赖文件放到某个路径下,让exe程序在指定路径下加载,此时需要用到qt 的qt.conf文件来处理。        qt.conf是一个配置文件,使用它可以让程序重新指定加载路径。在程序中使用QLibraryInfo类调用qt.conf文件,包含三

sxtdzj的博客 6154

Qt 插件路径(笔记)

Qt Manual 已经专门介绍了Deploying Plugins 的问题。半年前Qt 插件学习(一) 也简单整理了一点路径相关的问题。 可是,一直以来没理清:图片插件、编解码插件、数据库插件... 到底是如何被加载的? 走马观花 如果我们需要打开或保存一个jpg格式的图片,那么需要加载jpg的插件。程序去何处找插件: 表面的答案: $QTDIR/plugins/image...

tomhibolu 251

linux打包qt程序(包含qml)

本文介绍了Linux环境下程序打包部署的关键步骤:1) 确保目标系统GCC版本不低于开发环境;2) 在CMake中正确配置RPATH(需在add_executable之后设置INSTALL_RPATH为"$ORIGIN/../lib");3) 构建标准打包目录结构(包含bin、lib、plugins等子目录);4) 使用自动化脚本完整复制Qt库(需保留软链接)、插件和QML模块,特别强调必须配置qt.conf文件以确保正确加载本地资源。文中提供了详细的目录结构示例和完整的库拷贝脚本,可有效解决跨设备运行时的

weixin_55486665的博客 457

银河麒麟系统下Qt程序手动打包全流程详解

在Linux环境下,动态链接库的加载机制决定了可执行程序能否顺利运行。当Qt应用程序依赖的系统库缺失或路径不匹配时,常会引发“cannot open shared object file”等启动错误。理解ld.so的搜索顺序、RPATH与LD_LIBRARY_PATH的作用,是解决此类问题的关键。通过合理设置RPATH并整理依赖库,开发者可以将Qt程序及其运行环境打包成一个在目标系统上“解压即跑”的应用包,大幅降低交付与运维成本。在国产化与自主可控的背景下,银河麒麟等Linux发行版上的Qt应用部署需求日益

weixin_33767813的博客 374

Qt国际化——使用自带翻译包

#ifndef QT_NO_TRANSLATION QString translatorFileName = QLatin1String("qt_"); translatorFileName += QLocale::system().name(); QTranslator *translator = new QTranslator(this); if (...

weixin_30487317的博客 350

QGroundControl 中的 Qt 6 静态资源管理:从 CMake 配置到源码实现

本篇技术指南聚焦 Qt 6+ 工程中静态资源(图片、图标、字体、JSON、着色器与翻译文件)的打包与管理机制,并结合 QGroundControl(QGC)这一大型跨平台地面站项目的真实 CMake 配置与 C++ 源码,逐一拆解 `qt_add_qml_module`、`qt_add_resources`、`qt_add_translations` 等核心命令的用法、坑点与最佳实践。读完本文,你

gitblog_00534的博客 438
上一篇: VS编译报错error MSB6006: “CL.exe“已退出,代码为-1073741515
下一篇: Qt::WA_StaticContents标识作用
荆楚闲人
博客等级 码龄20年 3万+粉丝 473原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值