сохранение конфигов в qt linux - PullRequest
5 голосов
/ 14 ноября 2010

я написал приложение qt для linux.Приложение должно запускаться при запуске, что я и делал с записью на рабочем столе.

, но мне нужно, чтобы это было более сложно: есть флажок, который пользователь должен проверить, чтобы выбрать, будет ли приложениезапускаться при запуске или нет.

как мне сохранить его предпочтения?

приложение было ранее написано для Windows, и это было сохранено в реестре.я получил от Google, что я должен сохранить его в /etc.

, какой файл должен быть?как мне написать это в моем коде?и могу ли я добавить условие к записи на рабочем столе или я должен запустить какой-нибудь скрипт?

Я новичок во всем этом, поэтому я буду признателен за подробный ответ.

спасибо.

Ответы [ 4 ]

4 голосов
/ 14 ноября 2010

В этом конкретном случае сохранение настроек предпочтений, управляющих тем, должно ли приложение запускаться при запуске или нет, совершенно бессмысленно. Само существование файла рабочего стола автозапуска отражает состояние этого предпочтения. Если этот файл существует, установите флажок. Если пользователь снимает флажок, вы удаляете файл. Если пользователь установит флажок, вы создадите файл. Вот и все. Дублирование настройки в хранилище предпочтений приведет только к ошибкам, поскольку теперь вам нужно синхронизировать настройку и наличие файла в файловой системе, а также обрабатывать все виды угловых случаев.

Кроме того, имейте в виду, что /etc/xdg/autostart для общесистемных записей автозапуска. Если предполагается, что это настройка для каждого пользователя, вы должны создать файл .desktop в каталоге автозапуска пользователя. Чтобы определить его местоположение, пожалуйста, следуйте спецификации автозапуска приложения для настольного компьютера *1005*, которая требует, чтобы местоположение было $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;
}
2 голосов
/ 14 ноября 2010

Мое решение заключается в следующем.Напишите предпочтения пользователя для запуска при входе в систему в файле sat $ HOME / .config / myapp.pref (.config предотвращает ползучесть файла точек).Затем заставьте приложение для автоматического вызова приложения на рабочем столе добавить параметр командной строки (например, вызвать myapp -a вместо myapp).

Затем, в вашей программе, , если присутствует ключ -a, проверьте файл точек, чтобы узнать, хочет ли пользователь автозапуск.Если ответ да, бегите нормально.Если пользователь не хочет автозапуска, закройте программу.Кроме того, сделайте эту проверку и включите точечный файл до того, как установит все видимые пользователем части вашего приложения.

2 голосов
/ 14 ноября 2010

Для сохранения настроек используйте класс QSettings .Он действительно аккуратный, и в Windows он будет хранить свои значения в реестре, поэтому, скорее всего, он будет совместим с уже используемыми вами записями реестра.

0 голосов
/ 14 ноября 2010

/ ect для системных настроек.

Под загрузкой вы подразумеваете вход в систему или запуск системы?

Самым простым способом сохранения пользовательских (!) Пользовательских конфигураций в linux для пользователя является скрытый текстовый файл в его домашнем каталоге снастройки (в linux указание «.» в начале имени файла делает его скрытым).

Я думаю, что более современный подход - поместить не скрытый файл в папку симя вашего приложения в каталоге каталога config.то есть проверьте, установлен ли $ XDG_CONFIG_HOME, если он создает папку с именем вашего приложения с вашими файлами конфигурации в ней, в противном случае создайте папку в $ HOME / .config.См. http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html

PS Обычно вы вручную читаете файл настроек в начале вашего приложения (сразу после разбора аргументов командной строки.


Обратите внимание, что это «простой» способQt, похоже, имеет класс для работы с простыми настройками стиля словаря в кроссплатформенном виде, это может быть тем, что вам нужно, или вы можете проверить, если вы установили запуск и отменили / сделали (переключили) это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...