Qt App. Развертывание на Mac / XP / Vista / Windows 7: есть ли в общем каталоге доступа файл лицензии? - PullRequest
3 голосов
/ 28 июня 2011

Мне нужно развернуть приложение Qt в следующих средах:

  • Mac OS / X (> = Tiger 10.4 на базе Intel, до Snow Leopard 10.6. +)
  • Windows XP
  • Windows Vista
  • Windows 7

Мне нужен каталог общего доступа для размещения файла лицензии, и мне нужен каждый пользователь машины для доступа к нему для чтения / записи, а не только администратор.

Я проверил много функций Qt, как показано ниже:

QString QDir::homePath()
QDir QDir::home ()
QString QDir::rootPath ()
QString QDir::tempPath ()

... но все они, похоже, возвращают либо пользовательские, либо слишком общие пути.

Есть ли какая-либо специальная функция Qt для получения общего "Пути к приложениям"?

Я начал думать о создании своей собственной функции с учетом версии ОС, но даже в этом случае я чувствую себя немного потерянным. Знаете ли вы какой-нибудь хороший источник, чтобы найти подходящий путь для каждой из упомянутых выше ОС?

Ответы [ 4 ]

3 голосов
/ 28 июня 2011

Это ответ на мой собственный вопрос, но я подожду, чтобы увидеть, есть ли лучшие решения.(возможно, есть функция Qt, которую я пропустил).

Я сделал следующий хак, используя класс QSettings (@thequark: +1 для вдохновения):

---------------------------------------------
QString orgName = "fooOrg";
QString appName = "fooApp";
QSettings qsettings(QSettings::IniFormat, QSettings::SystemScope, orgName, appName);
QString iniFilepath = qsettings.fileName();
QString commAppPath = iniFilepath.left(iniFilepath.length() - 
                                       QString("/fooOrg/fooApp.ini").length());
---------------------------------------------

Как вы можете видетьЯ на самом деле не использую объект QSettings, но просто получаю его путь к файлу, чтобы увидеть, где Qt будет его хранить.

Важно использовать:

  • QSettings:: IniFormat : потому что нас интересует файл, а не, например, позиция в реестре Windows
  • QSettings :: SystemScope : потому что мы хотим, чтобы машина зависела от пользователя, а не от пользователяpath

Приведенный выше код дает следующие результаты для (1) переменных iniFilepath (2) commAppPath и различных O / S:

Mac Snow Leopard 10.6.7

  1. / Библиотека / Настройки / Qt / fooOrg / fooApp.ini
  2. / Библиотека / Настройки / Qt

Windows XP-SP3

  1. C: / Документы и настройки / Все пользователи / Данные приложения / fooOrg / fooApp.ini
  2. C: / Documents And Settings / Все пользователи / Данные приложений

Windows 7 (64) и Windows Vista SP2

  1. C: /ProgramData/fooOrg/fooApp.ini
  2. C: / ProgramData

Хотя это хак, я думаю, что это хорошее решение, включающее только внутренние вызовы Qt и не использующее какие-либо специальные функции O / S.

Если у вас есть идея получше ... пожалуйста, дайте мне знать.

РЕДАКТИРОВАТЬ - PS: В Mac OS-X каталог "/ Library / Preferences" недоступен для записи для других пользователей.Пользователь -admin.Я наконец-то использовал каталог "/Users/Shared".

2 голосов
/ 28 июня 2011

Я тоже n00b в Qt, поэтому я не уверен, что это лучший вариант, но как насчет использования QSettings, чтобы получить путь к файлу лицензии из файла настроек / конфигурации.Этот файл с правильными значениями должен быть создан установщиком.Установщик может позаботиться об использовании некоторых значений по умолчанию, специфичных для ОС, или даже спросить пользователя во время установки, чтобы ваше приложение не зависело от ОС.QSettings имеет постоянство, поэтому вам не нужно беспокоиться о чтении и записи в файл.

1 голос
/ 28 июня 2011

Для Windows 2000 и выше эта папка называется CSIDL_COMMON_APPDATA .

1 голос
/ 28 июня 2011

Посмотрите на QDesktopServices :: storageLocation .

QDesktopServices :: Перечисление DataLocation представляется подходящим.

...