首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >APPNAME不包含在QStandardPath::AppDataLocation中

APPNAME不包含在QStandardPath::AppDataLocation中
EN

Stack Overflow用户
提问于 2017-03-24 10:28:29
回答 3查看 953关注 0票数 3

我的应用程序名为unwallpaper,我想获得它的应用程序数据路径:

代码语言:javascript
复制
qDebug() << QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);

在Linux上返回/home/sign/.local/share,但是根据Qt文档的说法,应该返回的是/home/sign/.local/share/<APPNAME>

我应该在某个地方设置APPNAME值吗?我正在使用和qmake。谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-03-24 10:39:45

根据应用程序名称文档

如果未设置,应用程序名称默认为可执行名称(自5.0起)。

奇怪的是,返回的路径根本没有包含<APPNAME>

因此,更好的方法是显式设置应用程序名称和/或组织名称,如下所示:

代码语言:javascript
复制
QCoreApplication::setApplicationName("unwallpaper");
QCoreApplication::setOrganizationName("organization");
票数 3
EN

Stack Overflow用户

发布于 2017-03-24 10:36:32

您应该使用QCoreApplication::applicationFilePath()。它返回应用程序可执行文件的文件路径(包括可执行文件名)。

票数 0
EN

Stack Overflow用户

发布于 2021-12-26 11:33:56

我也有过类似的问题并进行了调查。一般的原因可能是因为在QStandartPaths初始化之前调用了QApplication。如果在全局方法或静态方法中调用QStandartPaths,则可能出现这种情况。通常,要小心全局和静态初始化,因为它是在main {}启动之前执行的。错误的例子:

代码语言:javascript
复制
/* includes etc */


class A
{
public:
    
    A();
    
//.....

}


class B

{
public:

    B() {};

//.....

private:

    static A* a;

}


B::a = new A();
/* A::A prints path(s) without AppName because at the moment of
initialisation main not started yet and AppName not assigned */


main
{
    QApplication ap(argc, argv); 
    ap.setApplicationName("AppName");
    ap.setApplicationDisplayName("AppDisplayName");


    new B();

}

void A::A()
{
    qDebug() << QStandardPaths::AppConfigLocation; 
}

正确的例子:

代码语言:javascript
复制
    /* includes etc */
    
    class A
    {
    public:
        
        A();
        
    //.....
    
    }

    class B
    
    {
    public:
    
        B();
    
    //.....
    
    private:
    
        static A* a;
    }

    B::a = nullptr;
    
    main
    {
        QApplication ap(argc, argv); 
        ap.setApplicationName("AppName");
        ap.setApplicationDisplayName("AppDisplayName");
    
        new B();
    
    }
    
    void A::A()
    {
        qDebug() << QStandardPaths::AppConfigLocation; 
    }
    
    void B::B()
    {
        if (a == nullptr) a = new A();
    /* A::A prints correct path(s) because all constructors invoked after QApplication initialization.
       if protects static a from re-initialization on multiple B creation */
    
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42997067

复制
相关文章

相似问题

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