Проблема при создании текстового файла (приложение Qt) в каталоге установки (для установки используется CMake) - PullRequest
0 голосов
/ 09 апреля 2011

Я новичок в программировании. Я создаю небольшую игру в слова, чтобы попрактиковаться в программировании на qt. В этом приложении я создаю текстовый файл (Score.txt), чтобы вести счет игрока. Я сделал это:

    QFile scoreFile("score.txt");
    if (QFile::exists("score.txt"))
    {
        scoreFile.open(QIODevice::ReadWrite | QIODevice::Text)
        // and update the score.
    }
    else
    {
        scoreFile.open(QIODevice::ReadWrite | QIODevice::Text);//create score file
        //and write the score to it.
    }

этот код работает хорошо здесь. Сейчас я использую CMake для сборки и установки сгенерированного двоичного файла (я работаю в Ubuntu), используя этот код:

#set project name, version and build code here.

установка (TARGETS wordJumbleGame DESTINATION bin)

Я строю проект в / home / myname / project / build /

Мой исходный код находится в / home / myname / project / src /

CMakeLists.txt находится в /home/myname/project/CMakeLists.txt

Я установил программу, используя make install. Пока все работает нормально. Но теперь проблема в том, что когда я запускаю эту программу (я запускаю ее из терминала, дающего команду wordJumbleGame), он создает файл Score.txt в каталоге / home / myname / project / build. Он не создается в установочном каталоге.

Так что, пожалуйста, помогите мне, что я делаю не так. И, пожалуйста, также скажите мне, как сделать так, чтобы моя программа появлялась в списках приложений-> игр, чтобы я мог запускать ее оттуда, а не из командной строки.

1 Ответ

1 голос
/ 09 апреля 2011

Если вы не ставите префикс с косой чертой (в unix) или путем к диску (Windows), параметр конструктора QFile - это относительный путь - относительно текущего рабочего каталога. Score.txt создается в каталоге build /, потому что это, вероятно, откуда вы выполняете двоичный файл.

Вы не можете хранить Score.txt в каталоге / usr / bin, потому что, как правило, вы не можете писать туда без прав root.

То, что вы хотите сделать, это получить путь к некоторому каталогу, где вы можете сохранить свой файл Score.txt. Для этого вы можете использовать класс QDesktopServices. Это даст вам информацию каталога для каждого пользователя. Вот пример:

#include <QDesktopServices>

// this would go in main(), probably
QCoreApplication::setApplicationName( "word jumble game" );

// now when you want to read/write the scores file:
QString dataPath = QDesktopService::storageLocation( QDesktopService::DataLocation );
QFile scoreFile( dataPath + "score.txt" );

// on my system, this produces: "/home/adam/.local/share/data/word jumble game/score.txt"
// it will produce something similar for Windows and Mac too

Вы должны установить имя своего приложения с помощью QCoreApplication::setApplicationName, прежде чем получать информацию о пути, чтобы сохранить каталог данных пользователя красивым и упорядоченным.

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

Вам необходимо создать файл записи .desktop и установить его, используя xdg-desktop-menu install. Вот два ресурса для вас: спецификация меню freedesktop.org и добавление файлов .desktop с использованием CMake

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