Qt - Сборка драйвера PSQL


Для работы Qt
с СУБД PostgreSQL
, кроме драйвера ODBC
можно (а в некоторых случаях необходимо) использовать драйвер QPSQL
. Но в виде скомпилированной библиотеки изначально его нет, потому сначала его необходимо собрать из исходников.
В статье пойдёт речь о сборке драйвера QPSQL
в среде ОС MS Windows
.
Все пути к файлам и каталогам, приведённые в статье, скорее всего будут отличаться от ваших, будьте внимательны.
Требования
- ОС:
Microsoft Windows 7 Professional x32
;Microsoft Windows 7 Professional x64
;Microsoft Windows XP Home x32
;
Qt 4.8.1
(установленный с исходниками (QtSouces));PostgreSQL 8.4.12-1 x32
.
Однако, это не означает, что на других версиях ОС и ПО ничего не получится. Здесь приведены лишь проверенные.
В системную переменную PATH
должны быть добавлены следующие пути:
;D:\Programs\Qt\Desktop\Qt\4.8.1\mingw\bin
;D:\Programs\Qt\mingw\bin
D:\Programs\PostgreSQL\bin
;D:\Programs\PostgreSQL\include
;D:\Programs\PostgreSQL\lib
.
После этого можно (и желательно) перезагрузить компьютер.
Пути до файлов библиотек и утилит Qt
, в общем-то, не обязательны, но всё же не повредит добавить их в PATH
.
Сборка
На самом деле, всё очень просто. Исходники драйвера QPSQL
лежат в каталоге QtSources
, достаточно лишь открыть его проектный файл в QtCreator
и выполнить сборку.
Однако, это звучит слишком просто, чтобы быть правдой. И в самом деле - есть ряд некоторых нюансов.
Идём в D:\Programs\Qt\QtSources\4.8.1\src\plugins\sqldrivers\psql\
.
Там лежит файл проекта psql.pro
, открываем его в QtCreator
. Он выцепит вместе с собой все остальные необходимые проекты. Нам надо изменить проект D:\Programs\Qt\QtSources\4.8.1\src\sql\drivers\psql\qsql_psql.pri
(только не на диске его искать и открывать в блокноте, а именно тут, в проекте - в дереве файлов проекта развернуть ветку psql
и редактировать файл проекта), комментируем в нём следующие строки:
HEADERS += $$PWD/qsql_psql.h
SOURCES += $$PWD/qsql_psql.cpp
unix|win32-g++* {
LIBS *= $$QT_LFLAGS_PSQL
# !contains(LIBS, .*pq.*):LIBS += -lpq
# QMAKE_CXXFLAGS *= $$QT_CFLAGS_PSQL
#} else {
!contains(LIBS, .*pq.*):LIBS += -llibpq -lws2_32 -ladvapi32
}
Теперь дописываем следующее в файл проекта psql.pro
:
INCLUDEPATH += \
"d:/Programs/PostgreSQL/include/"
LIBS += -L"d:/Programs/PostgreSQL/bin" -llibpq
Если INCLUDEPATH
не сработает, и он потребует заголовочные файлы, то найдите их по именам в каталоге D:\Programs\PostgreSQL\include\
и скопируйте в каталог с проектом D:\Programs\Qt\QtSources\4.8.1\src\plugins\sqldrivers\psql\
.
То же касается и библиотеки. Если не подхватит, то идём в D:\Programs\PostgreSQL\lib\
и копируем оттуда libpq.dll
в D:\Programs\Qt\QtSources\4.8.1\src\plugins\sqldrivers\psql\
.
Теперь можно выполнить сборку. Кстати, выполните обе сборки: и debug
, и release
.
Получившиеся qsqlpsqld4.dll
и qsqlpsql4.dll
поместите в D:\Programs\Qt\Desktop\Qt\4.8.1\mingw\plugins\sqldrivers\
.
Теперь не забудьте вернуть назад все изменения в файлах psql.pro
и qsql_psql.pri
.
Проверка
Создаём проект для проверки - GUI-приложение, например. Кнопка и текстовое поле. По нажатию на кнопку в поле будут выводиться имена всех имеющихся драйверов и осуществляться попытка добавить базу данных с драйвером QPSQL
.
В файле проекта дописать:
QT += sql
В исходниках формы на обработчик кнопки:
void MainWindow::on_pushButton_clicked()
{
// вывод списка строк - имён драйверов
QStringList list = QSqlDatabase::drivers();
for(int x = 0; x < list.length(); x++)
ui->log->append(list.at(x));
// попытка создания подключения к БД посредством драйвера QPSQL
QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
ui->log->append(tr("---<br><b>QPSQL-driver is ")
+(db.isValid()
? tr("<font color=green>OK</font></b>")
: tr("<font color=red>NOT</font></b>")));
}
Скриншот приложения:

Загрузить исходники проверочного проекта можно здесь.
Если по материалам статьи ничего не получилось, то попробуйте сделать по этой инструкции. У автора статьи, однако, ничего не получилось как раз по ней, после чего был опробован описываемый способ и написана настоящая статья.