我为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;
}

09-28 15:02