База данных Qt SQLite без абсолютного пути - PullRequest
4 голосов
/ 23 января 2012

Есть ли способ сослаться на файл database.sqlite, не зная абсолютного пути?

_db = QSqlDatabase::addDatabase("QSQLITE");
_db.setDatabaseName("/the/path/i/dont/know/database.sqlite");
  • Я уже пытался добавить database.sqlite в папку Resources и вызватьэто через qrc:, но, по-видимому, невозможно записать в файл ресурсов.

  • Я также пытался использовать QApplication::applicationDirPath();, но это приводило бы к различным путям в зависимости от пользователяОПЕРАЦИОННЫЕ СИСТЕМЫ.Например, он добавляет MyApp.app/Contents/MacOS к фактическому каталогу.

Ответы [ 2 ]

2 голосов
/ 23 января 2012

Когда вы создаете QSqlDatabase с SQLite в качестве бэкэнда, у вас есть два варианта:

  • Задать абсолютный путь в качестве имени БД
  • Задать относительный путь: в этом случаеБаза данных будет сохранена в каталоге вашего двоичного файла.

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

edit

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

QSettings settings;
QString dbPath = settings.readValue("DBPath", QString(/*fallback path*/)).toString();
//do smth with dbPath

Взгляните дальше здесь

0 голосов
/ 27 марта 2012

, если вы хотите сохранить дБ на пользователя, которого вы кричите, используйте это:

QDesktopServices::storageLocation(QDesktopServices::DataLocation)

этот метод возвращает место, где могут храниться постоянные данные приложения.

для получения дополнительной информации проверьте это: http://doc.trolltech.com/4.5/qdesktopservices.html#storageLocation

...