Qt - Сборка драйвера PSQL — различия между версиями
Bit (обсуждение | вклад) |
ILobster (обсуждение | вклад) м (cpp) |
||
Строка 40: | Строка 40: | ||
Там лежит файл проекта <code>psql.pro</code>, открываем его в <code>QtCreator</code>. Он выцепит вместе с собой все остальные необходимые проекты. Нам надо изменить проект <code>D:\Programs\Qt\QtSources\4.8.1\src\sql\drivers\psql\qsql_psql.pri</code> (только не на диске его искать и открывать в блокноте, а именно тут, в проекте - в дереве файлов проекта развернуть ветку <code>psql</code> и редактировать файл проекта), комментируем в нём следующие строки: | Там лежит файл проекта <code>psql.pro</code>, открываем его в <code>QtCreator</code>. Он выцепит вместе с собой все остальные необходимые проекты. Нам надо изменить проект <code>D:\Programs\Qt\QtSources\4.8.1\src\sql\drivers\psql\qsql_psql.pri</code> (только не на диске его искать и открывать в блокноте, а именно тут, в проекте - в дереве файлов проекта развернуть ветку <code>psql</code> и редактировать файл проекта), комментируем в нём следующие строки: | ||
− | <syntaxhighlight lang="cpp | + | <syntaxhighlight lang="cpp" highlight="6,7,8"> |
HEADERS += $$PWD/qsql_psql.h | HEADERS += $$PWD/qsql_psql.h | ||
SOURCES += $$PWD/qsql_psql.cpp | SOURCES += $$PWD/qsql_psql.cpp | ||
Строка 55: | Строка 55: | ||
Теперь дописываем следующее в файл проекта <code>psql.pro</code>: | Теперь дописываем следующее в файл проекта <code>psql.pro</code>: | ||
− | <syntaxhighlight lang="cpp | + | <syntaxhighlight lang="cpp"> |
INCLUDEPATH += \ | INCLUDEPATH += \ | ||
"d:/Programs/PostgreSQL/include/" | "d:/Programs/PostgreSQL/include/" | ||
Строка 77: | Строка 77: | ||
В файле проекта дописать: | В файле проекта дописать: | ||
− | <syntaxhighlight lang="cpp | + | <syntaxhighlight lang="cpp"> |
QT += sql | QT += sql | ||
</syntaxhighlight> | </syntaxhighlight> | ||
В исходниках формы на обработчик кнопки: | В исходниках формы на обработчик кнопки: | ||
− | <syntaxhighlight lang="cpp | + | <syntaxhighlight lang="cpp"> |
void MainWindow::on_pushButton_clicked() | void MainWindow::on_pushButton_clicked() | ||
{ | { |
Текущая версия на 15:37, 24 января 2016
Содержание
Для работы 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>"))); }
Скриншот приложения:
Загрузить исходники проверочного проекта можно здесь.
Если по материалам статьи ничего не получилось, то попробуйте сделать по этой инструкции. У автора статьи, однако, ничего не получилось как раз по ней, после чего был опробован описываемый способ и написана настоящая статья.