gpt4 book ai didi

linux - 在 qt linux 中保存配置

转载 作者:IT王子 更新时间:2023-10-29 01:14:55 25 4
gpt4 key购买 nike

我为 linux 编写了一个 qt 应用程序。该应用程序应该在启动时运行 - 我做了一个桌面条目。

但我需要它更复杂:有一个复选框,用户应该选中该复选框以选择应用程序是否在启动时运行。

我应该如何保存他的偏好?

该应用程序之前是为 Windows 编写的,并且保存在注册表中。我通过谷歌搜索得知我应该将其保存在/etc 中。

应该是什么文件?我如何在我的代码中编写它?我可以向桌面条目添加条件,还是应该运行一些脚本?

我对这一切都很陌生,所以我会给予详细的回答。

谢谢你。

最佳答案

对于这种特殊情况,保存控制应用程序是否应在启动时运行的首选项设置是完全没有意义的。自动运行条目桌面文件的存在反射(reflect)了该首选项的状态。如果该文件存在,则选中该复选框。如果用户取消选中该复选框,您将删除该文件。如果用户选中该复选框,则您创建该文件。而已。在首选项存储中复制设置只会导致错误,因为现在您必须使文件系统中的设置和文件的存在保持同步,并且您必须处理各种极端情况。

此外,请记住 /etc/xdg/autostart 用于系统范围的自动运行条目。如果它应该是每个用户的设置,您应该在用户的自动启动目录中创建 .desktop 文件。要确定其位置,请按照 Desktop Application Autostart Specification ,它要求位置为 $XDG_CONFIG_DIRS/autostart,通常解析为用户家中的 .config/autostart 目录(但是,如果 XDG_CONFIG_DIRS 环境变量存在,您应该通过先读取该值然后将 /autostart 附加到它来解决它。)

这是一个示例程序,可以打印出您想要的内容:

#include <cstdlib>
#include <iostream>
#include <QtCore/QString>
#include <QtCore/QDir>

#ifndef Q_OS_UNIX
#error This method only makes sense on Unix, use OS-specific handling for other OSes.
#endif

QString getUserXdgConfigDir()
{
QString result(std::getenv("XDG_CONFIG_DIRS"));
if (result.isEmpty()) {
// XDG_CONFIG_DIRS is not defined, we'll use the default value
// as mandated by http://standards.freedesktop.org/autostart-spec/autostart-spec-latest.html
result = QDir::homePath() + QDir::separator() + ".config";
}
return result;
}

QString getUserAutostartDir()
{
return getUserXdgConfigDir() + QDir::separator() + "autostart";
}

int main(int argc, char *argv[])
{
std::cout << "User config dir is " << getUserXdgConfigDir().toStdString() << std::endl;
std::cout << "User autostart dir is " << getUserAutostartDir().toStdString() << std::endl;
return 0;
}

关于linux - 在 qt linux 中保存配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4177953/

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