Qt--qt.conf

来源:互联网 发布:运动减肥软件 编辑:程序博客网 时间:2024/05/29 16:31

在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 = /some/path