【问题标题】:When is QCoreApplication valid?QCoreApplication 何时有效?
【发布时间】:2019-12-16 10:46:12
【问题描述】:

我想获取应用程序路径,但是当我在 Qt Creator 中运行应用程序时,applicationPath() 方法返回一个空字符串:

    int main(int argc, char *argv[]) {   
        QLoggingCategory::setFilterRules("*.info=false\n");
        QCoreApplication::setOrganizationName("company name");
        QCoreApplication::setOrganizationDomain("companydomain.com");
        QCoreApplication::setApplicationName("AppName");

    #ifdef QT_DEBUG
        //Install logging message handler
        Logger::LogManager::setApplicationPath(QCoreApplication::applicationFilePath());
        qInstallMessageHandler(Logger::LogManager::logMsg);
        qDebug() << "built with debug";
    #else
        qDebug() << "built for release";
    #endif
    ...

【问题讨论】:

    标签: c++ qt qcoreapplication


    【解决方案1】:

    我已通过更改例程来获取应用程序名称来解决此问题名称,因为这正是我所需要的:

        Logger::LogManager::setApplicationName(QCoreApplication::applicationName());
    

    无论如何,QCoreApplication::applicationFilePath() 和 QCoreApplication::applicationDirPath() 在创建 QCoreApplication 实例后可用。如果您需要在创建 QCoreApplication 实例之前获取应用程序路径,则需要参考 argv[0] 并针对您的用例进行解析。

    【讨论】:

      【解决方案2】:

      即使你的实际问题不同,我也会解释这个问题。

      QCoreApplication 根据可执行文件计算文件路径和默认应用程序名称。可执行文件取自first command-line argument, argv[0]。

      您必须首先使用这些参数实例化QCoreApplication(即使它们是静态的,它们也会访问必须初始化的内部单例)。

      实际上,在没有任何先前实例的情况下访问此类方法时,Qt 会给您一个控制台警告:

      QCoreApplication::applicationFilePath: 请先实例化QApplication对象

      #include <QCoreApplication>
      #include <QDebug>
      
      int main(int argc, char *argv[])
      {
        qDebug() << "applicationFilePath" << QCoreApplication::applicationFilePath();
        qDebug() << "applicationName" << QCoreApplication::applicationName();
        QCoreApplication a(argc, argv);
        qDebug() << "applicationFilePath" << QCoreApplication::applicationFilePath();
        qDebug() << "applicationName" << QCoreApplication::applicationName();
      
        return a.exec();
      }
      

      输出

      CoreApplication::applicationFilePath: Please instantiate the QApplication object first
      applicationFilePath ""
      applicationName ""
      applicationFilePath "D:/src/stackoverflow/59355035/debug/59355035.exe"
      applicationName "59355035"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-21
        • 1970-01-01
        • 2023-03-14
        相关资源
        最近更新 更多