2013-07-15 8 views
1

У меня есть проект Qt с абсолютным путем.Qt-C++ connect Sqlite по абсолютному пути

QString path_to_db = "F:/Binh_Efeis/resources/database/efeis.sqlite"; 

Когда я построить этот проект и запустить его (как F:/Binh_Efeis/debug/EfB.exe), он отлично работает.

Но мы не можем использовать абсолютные пути при развертывании в других системах.

Мы хотим использовать относительный путь.

+0

Проверьте рабочий каталог. Относительные пути относятся к рабочему каталогу (например, '../ resources/database/efeis.sqlite') – sehe

ответ

1

Проверьте свою рабочую директорию - или «текущий» каталог (именование, предпочитаемое Windows API).

Относительные пути относительно рабочего каталога (например ../resources/database/efeis.sqlite, если 'текущий' каталог F:/Binh_Efeis/debug)

EDIT Установите рабочую директорию внутри IDE с помощью:

enter image description here

См. Creator Run Settings для получения дополнительной информации

+0

Это моя структура: F: \ Binh_Efeis \ - debug - headers \ helper \ common_helper.h (Этот файл содержит относительный путь). Итак, я сделаю относительный путь: QString path_to_db = "../../resources/database/efeis.sqlite"; .Это правильно? – Brian

+0

№ Расположение исходного файла не имеет значения. Вы должны сделать это относительно каталога _working вашего приложения. Это свойство среды выполнения и ничего *** не связано с вашим исходным кодом. – sehe

+0

Если я использую IDE QT-Creator, нажмите Ctrl + R - это средний пробег - Он показывает [pre] Dir: «F: /Source/release/EfB.exe» F: \ Source \ release \ EfB.exe завершен с кодом 0 [код] ---- .. Если я использую qmake и запускаю «mingw32-make debug-all», он будет генерировать .exe для отладки папки. Если мы его используем, он подключается к базе данных .sqlite fine. – Brian

1

Использование QCoreApplication::applicationDirPath() лучше, чем usi Текущий каталог. Я использовал сторонние библиотеки, которые меняют текущий каталог, что вызовет проблемы, если другие части программы полагаются на значение текущего каталога.

+0

Дорогой Roku, с QCoreApplication :: applicationDirPath(), он покажет папку сборки. В моем случае он покажет папку F:/build-EfB-Desktop_Qt_5_1_0_MinGW_32bit-Debug. Можете ли вы дать мне какое-либо решение? – Brian

+0

@Roku Вы не можете заставить ОС интерпретировать пути интерпретации относительно чего-либо, кроме текущего рабочего каталога. Вы делаете хороший момент, но это вряд ли проблема OP: он не сравнится с относительными путями. В любом случае, я добавлю +1, если вы покажете переносимый Qt-код для создания относительного пути от 'applicationDirPath()', потому что он может помочь OP – sehe

+1

@sehe Если вы используете _only_ относительный путь, то, конечно, путь может быть только относительно текущего каталога. Но просто добавьте относительный путь с абсолютным пути dir приложения, и там у вас есть путь относительно пути к приложению: 'QString path = QCoreApplication :: applicationDirPath() +" /database/efeis.sqlite ";' –

Смежные вопросы