gpt4 book ai didi

c++ - 在运行时将更改环境变量应用于应用程序

转载 作者:行者123 更新时间:2023-11-28 04:09:07 26 4
gpt4 key购买 nike

我在努力奔跑

qputenv("QT_DEBUG_PLUGINS", "1");

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

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

#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 之上,它始终有效,但我希望这是一个在运行时可用的配置选项。

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

最佳答案

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

我认为您对什么是“应用程序”和什么是 QApplication 感到困惑。 QApplication 是应用程序中的一个对象。丢弃 QApplication 对象并创建一个新对象不会重新启动整个应用程序。

这可能与您的应用程序在启动时继承环境的想法有关,并且在您停止应用程序之前对应用程序外部环境所做的更改不会生效。但是,在这种情况下,qputenv 调用正在更新您的应用程序的环境拷贝。它不会改变您最初继承的外部环境。

关于c++ - 在运行时将更改环境变量应用于应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58203316/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com