簡體   English   中英

QCoreApplication 什么時候有效?

[英]When is QCoreApplication valid?

我想獲取應用程序路徑,但是當我在 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
    ...

我已經通過更改我的例程來獲取應用程序名稱來解決這個問題名稱,因為這正是我所需要的:

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

無論如何, QCoreApplication::applicationFilePath()QCoreApplication::applicationDirPath()在創建QCoreApplication實例后可用。 如果您需要在創建QCoreApplication實例之前獲取應用程序路徑,則需要參考 argv[0] 並針對您的用例對其進行解析。

即使您的實際問題不同,我也會解釋這個問題。

QCoreApplication根據可執行文件計算文件路徑和默認應用程序名稱。 可執行文件取自第一個命令行參數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"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM