![](/img/trans.png)
[英]Error when calling quit() on a QCoreApplication within a QThread
[英]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.