首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在运行时将更改后的环境变量应用于QApplication

在运行时将更改后的环境变量应用于QApplication
EN

Stack Overflow用户
提问于 2019-10-02 22:13:33
回答 1查看 544关注 0票数 1

我在试着跑

代码语言:javascript
运行
复制
qputenv("QT_DEBUG_PLUGINS", "1");

在运行时,QT应用程序的MainWindow进行了评估。

我假设对于实际应用的新环境变量,我必须关闭初始化的QApplication并重启它,但是我无法使它工作。

代码语言:javascript
运行
复制
#include <QApplication>
#include "mainwindow.h"


int main(int argc, char *argv[])
{
    int exitCode = 0;
    do
    {
        //exitCode = EXIT_CHANGE_DEBUG_FLAG; //This will make it ALWAYS work

        //Double-checking for testing only, still does not work.
        if(exitCode == EXIT_CHANGE_DEBUG_FLAG)
        {
            qputenv("QT_DEBUG_PLUGINS", "1"); // Code does fire on 2nd pass, new app/window still ignores it
        }
        QApplication app(argc, argv);
        MainWindow mainWindow;
        mainWindow.show();
        exitCode = app.exec();
        //We can't change this once the app has been established.
        qputenv("QT_DEBUG_PLUGINS", "1");
        exitCode = EXIT_CHANGE_DEBUG_FLAG; //for testing only
    }
    while(exitCode == EXIT_CHANGE_DEBUG_FLAG);
    return(exitCode);
}

应用程序确实会重新启动,但是它的行为并不像设置了QT_DEBUG_PLUGINS一样。如果我将该行移到QApplication之上,它总是可以工作,但我希望这是一个在运行时可用的配置选项。

我觉得我要么是在做不可能的事情,要么是我忽略了一些愚蠢的事情。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-03 05:07:47

您可以在程序执行的任何时候设置环境变量,进一步调用qgetenv将返回新值。您不必丢弃并重新创建QApplication。只需在用户选择该配置选项时设置环境变量,它将在应用程序的其余执行时间内生效。

我认为你把什么是你的“应用程序”和什么是QApplication搞混了。QApplication是应用程序中的一个对象。丢弃QApplication对象并创建一个新对象并不会重新启动整个应用程序。

这可能是因为您的应用程序在启动时继承了环境,并且对应用程序外部的环境所做的更改只有在您停止应用程序后才会生效。但是,在本例中,qputenv调用将更新应用程序的环境副本。它不会改变您最初继承的外部环境。

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

https://stackoverflow.com/questions/58203316

复制
相关文章

相似问题

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