Нам нужен особый путь! Кроссплатформенный!

Итак, досталась мне тут прога на Qt5 всё хорошо, НО! Работает только на андройде, ну вот так вот...задача: Сделать из неё кроссплатформенную прогу...да дурость, но задача есть, айда её решать!
Нам нужен особый путь! Кроссплатформенный!

Смотрим в код...ни чего странного кроме...
Код CPP-QT:
  1. QString store_prefix = "/storage/sdcard0/APP_NAME"
Эм.....короче прога сохраняет все свои файлы, с которыми работает в папочку на SD карте, даже если её нет...так и хочется спросить прошлого программиста: "Мальчик ты дурак?", тут всё встаёт на свои места, и всё кажется не таким уж и сложным.
Итак, решение:
В Qt с версии 5.0 это шикарный класс, который предоставляет пути к различным папкам, в зависимости от их назначения:
QStandardPaths
И делается всё достаточно просто меняем абсолютные пути на это:
Код CPP-QT:
  1. QString store_prefix = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
Видим в коде: AppDataLocation - читаем в доках: Returns a directory location where persistent application data can be stored. This is an application-specific directory. To obtain a path to store data to be shared with other applications, use QStandardPaths::GenericDataLocation. The returned path is never empty. On the Windows operating system, this returns the roaming path. This enum value was added in Qt 5.4. Да, эта переменная добавлена с 5.4 так что стоит обновиться. Там же в описаниях класса есть много других переменных, которые Вам помогут.
Ну и конечно же не забываем проверить есть ли эта папка и если нет, то создать её:
Код CPP-QT:
  1. QDir dir(store_prefix);
  2. if(!dir.exists())
  3. {
  4. dir.mkpath(store_prefix);
  5. }
И это исправило багу с кроссплатформенностью! Вот и всё, не пилите велосипеды, читайте доки и радуйтесь жизни :)
Комментарии (0)

Нет комментариев. Ваш будет первым!

Copyright 2016-2024 NeoChapay