我为Linux编写了一个qt应用程序。该应用程序应该在启动时运行 - 我
用桌面条目做的。
但我需要它更复杂:
用户应该检查一个复选框,以便选择应用程序是否在启动时运行。
我该如何保存他的偏好?
该应用程序之前是为 Windows 编写的,并且保存在注册表中。
我通过谷歌搜索得知我应该将其保存在 /etc 中。
它应该是什么文件?我如何在我的代码中编写它?
我可以在桌面条目中添加一个条件,还是应该运行一些脚本?
我对这一切都很陌生,所以我将不胜感激详细的答案。
thank u.
对于这种特殊情况,保存控制应用程序是否应在启动时运行的首选项设置是完全没有意义的。自动运行条目桌面文件的存在本身就反映了该首选项的状态。如果该文件存在,请选中该复选框。如果用户取消选中该复选框,您将删除该文件。如果用户选中该复选框,您将创建该文件。就是这样。在首选项存储中复制设置只会导致错误,因为现在您必须保持设置和文件系统中文件的存在同步,并且必须处理各种极端情况。
此外,请记住/etc/xdg/autostart
用于系统范围的自动运行条目。如果它应该是每个用户的设置,您应该在用户的自动启动目录中创建 .desktop 文件。要确定其位置,请按照桌面应用程序自动启动规范 http://standards.freedesktop.org/autostart-spec/autostart-spec-latest.html,这要求该位置是$XDG_CONFIG_DIRS/autostart
,这通常解析为.config/autostart
用户主目录中的目录(但是,如果XDG_CONFIG_DIRS
环境变量存在,您应该通过先读取该值然后附加来解决它/autostart
to it.)
这是一个示例程序,它将打印出您想要的内容:
#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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)