QCoreApplication 什么时候有效?
When is QCoreApplication valid?
我想获取应用程序路径,但是当我 运行 Qt Creator 中的应用程序时,applicationPath() 方法 returns 一个空字符串:
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
根据可执行文件计算文件路径和默认应用程序名称。可执行文件取自 first command-line argument, argv[0]
.
您必须首先使用这些参数实例化 QCoreApplication
(即使它们是静态的,它们也会访问必须初始化的内部单例)。
实际上,在没有任何先前实例的情况下访问此类方法时,Qt 会给您一个控制台警告:
QCoreApplication::applicationFilePath: Please instantiate the QApplication object first
#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/Whosebug/59355035/debug/59355035.exe"
applicationName "59355035"
我想获取应用程序路径,但是当我 运行 Qt Creator 中的应用程序时,applicationPath() 方法 returns 一个空字符串:
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
根据可执行文件计算文件路径和默认应用程序名称。可执行文件取自 first command-line argument, argv[0]
.
您必须首先使用这些参数实例化 QCoreApplication
(即使它们是静态的,它们也会访问必须初始化的内部单例)。
实际上,在没有任何先前实例的情况下访问此类方法时,Qt 会给您一个控制台警告:
QCoreApplication::applicationFilePath: Please instantiate the QApplication object first
#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/Whosebug/59355035/debug/59355035.exe"
applicationName "59355035"