首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QCoreApplication什么时候有效?

QCoreApplication什么时候有效?
EN

Stack Overflow用户
提问于 2019-12-16 10:46:12
回答 2查看 1.5K关注 0票数 2

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

代码语言:javascript
复制
    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
    ...
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-17 12:40:14

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

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

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

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

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

代码语言:javascript
复制
#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();
}

输出

代码语言:javascript
复制
CoreApplication::applicationFilePath: Please instantiate the QApplication object first
applicationFilePath ""
applicationName ""
applicationFilePath "D:/src/stackoverflow/59355035/debug/59355035.exe"
applicationName "59355035"
票数 1
EN

Stack Overflow用户

发布于 2019-12-16 11:03:07

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

代码语言:javascript
复制
    Logger::LogManager::setApplicationName(QCoreApplication::applicationName());

无论如何,QCoreApplication::applicationFilePath()QCoreApplication::applicationDirPath()在创建QCoreApplication实例之后都是可用的。如果您需要在创建QCoreApplication实例之前获得应用程序路径,则需要参考argv并为您的用例解析它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59355035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档