zoukankan      html  css  js  c++  java
  • Qt 获取程序所在路径等特殊路径的方法

    https://www.cnblogs.com/linuxAndMcu/p/12869383.html

    目录


    经常我们的程序中需要访问一些特殊的路径,比如程序所在的路径、用户目录路径、临时文件夹等。在 Qt 中实现这几个功能所用的方法虽然都不难,但是各不相同,每次用到时还要现去查,很不方便。因此就写了这篇博客,把这几种需求的实现方式总结了一下。

    比如我们有一个程序在:

    C:/Qt/examples/tools/regexp/regexp.exe

    1. 程序所在路径

    获取 exe 程序所在路径,QCoreApplication 类里就实现了相关的功能:

    //输出:C:/Qt/examples/tools/regexp
    qDebug() << QCoreApplication::applicationDirPath();
    

    2. 程序的完整名称

    可以这么写:

    //输出:C:/Qt/examples/tools/regexp/regexp.exe
    qDebug() << qApp->applicationFilePath();
    

    3. 当前工作目录

    QDir 提供了一个静态函数 currentPath() 可以获取当前工作目录,函数原型如下:

    qDebug() << QDir::currentPath();
    

    如果我们是双击一个程序运行的,那么程序的工作目录就是程序所在目录。

    如果是在命令行下运行一个程序,那么运行程序时在命令行的哪个目录,那个目录就是当前目录。

    4. 用户目录路径

    Qt 4 中的方法。下面的方法只对 Qt 4 有效,Qt 5 已经删除了 storageLocation() 方法。

    QDesktopServices::storageLocation(QDesktopServices::HomeLocation);
    

    Qt 5 中引入的方法。

    QStandardPaths::writableLocation(QStandardPaths::HomeLocation);
    

    或者

    QStandardPaths::standardLocations(QStandardPaths::HomeLocation);
    

    这两个方法的区别是 standardLocations() 返回值是 QStringList。当然对于 HomeLocation 来说这个 QStringList 中只有一个 QString。

    还有另外一种方法,利用 QDir 类的一个静态函数:

    QDir::homePath();
    

    博主的用户目录路径为:"C:/Users/Administrator"。

    5. 桌面路径

    Qt 4 中的方法。下面的方法只对 Qt 4 有效,Qt 5 已经删除了 storageLocation() 方法。

    QDesktopServices::storageLocation(QDesktopServices::DesktopLocation);
    

    Qt 5 中引入的方法。

    QStandardPaths::writableLocation(QStandardPaths::DesktopLocation);
    QStandardPaths::standardLocations(QStandardPaths::DesktopLocation);
    

    6. 程序数据存放路径

    通常我们会将程序所需的一些数据存入注册表。但是有时需要存储的数据太多,放在注册表中就不适合了。这时我们就要找个专门的地方来放数据。以前我喜欢将数据直接放到程序所在目录,但是后来发现我的程序运行时经常没有权限对这个目录下的文件进行写操作。后来发现其实 Qt 早就替我们考虑过这些问题了。

    Qt 4 中的方法。下面的方法只对 Qt 4 有效,Qt 5 已经删除了 storageLocation() 方法。

    QDesktopServices::storageLocation(QDesktopServices::DataLocation);
    

    Qt 5 中引入的方法。

    QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
    QStandardPaths::standardLocations(QStandardPaths::AppDataLocation);
    

    Qt 5.5 中引入了另一种方法:

    QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation);
    QStandardPaths::standardLocations(QStandardPaths::AppConfigLocation);
    

    这个方法一般来说和上面的方法得到的结果是相同的。按照 Qt 帮助文档的解释,这个方法可以确保返回的路径非空。所以我认为应该优先选用这个方法。

    7. 临时文件路径

    Qt 4 中的方法。下面的方法只对 Qt 4 有效,Qt 5 已经删除了 storageLocation() 方法。

    QDesktopServices::storageLocation(QDesktopServices::TempLocation);
    

    Qt 5 中引入的方法。

    QStandardPaths::writableLocation(QStandardPaths::TempLocation);
    QStandardPaths::standardLocations(QStandardPaths::TempLocation);
    

    更传统的方法是利用 QDir 的一个静态函数 tempPath()。

    QDir::tempPath();
    

    在这个目录下生成临时文件和临时目录需要用到另外两个类: QTemporaryFile 和 QTemporaryDir。就不展开介绍了,大家可以参考 qt 的帮助文档。

    至此,常用的各种特殊路径就介绍的差不多了。剩下还有些不常用的,可以参考 QStandardPaths 类的介绍。

    参考:

    Qt 程序获取程序所在路径、用户目录路径、临时文件夹等特殊路径的方法

    作者:疯狂Delphi
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.

    欢迎关注我,一起进步!扫描下方二维码即可加我

  • 相关阅读:
    IDEA快捷键:查询快捷键
    IDEA快捷键:自动代码(get、set、构造方法、try...catch、if....else、重写方法、实现方法、大小写转换、格式化、方法参数提示、方法的声明)
    查找(顺序查找、折半查找、分块查找)
    Springboot:整合Mybatis
    required a bean of type 'com.zhb.dao.StudentDao' that could not be found.
    Springboot:整合Druid
    Springboot:整合JDBC
    springboot、Thymeleaf、国际化的简单使用
    Exception evaluating SpringEL expression
    java8:四大核心函数式接口(消费型、供给型、函数型、断言型)
  • 原文地址:https://www.cnblogs.com/FKdelphi/p/14436262.html
Copyright © 2011-2022 走看看