Qt - Сборка драйвера PSQL: различия между версиями

Материал из Кафедра ИУ5 МГТУ им. Н.Э.Баумана, студенческое сообщество
Перейти к навигации Перейти к поиску
м (→‎Сборка: debug и release)
м (cpp)
 
(не показаны 2 промежуточные версии 2 участников)
Строка 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-qt" highlight="6,7,8">
<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-qt">
<syntaxhighlight lang="cpp">
INCLUDEPATH += D:/Programs/PostgreSQL/include \
INCLUDEPATH += \
                D:/Programs/PostgreSQL/lib
    "d:/Programs/PostgreSQL/include/"


LIBS += -L$$PWD/ -llibpq
LIBS += -L"d:/Programs/PostgreSQL/bin" -llibpq
</syntaxhighlight>
</syntaxhighlight>


Если <code>INCLUDEPATH</code> не сработает, и он потребует заголовочные файлы, то найдите их по именам в каталоге <code>D:/Programs/PostgreSQL/include</code> и скопируйте в каталог с проектом <code>D:\Programs\Qt\QtSources\4.8.1\src\plugins\sqldrivers\psql\</code>.
Если <code>INCLUDEPATH</code> не сработает, и он потребует заголовочные файлы, то найдите их по именам в каталоге <code>D:\Programs\PostgreSQL\include\</code> и скопируйте в каталог с проектом <code>D:\Programs\Qt\QtSources\4.8.1\src\plugins\sqldrivers\psql\</code>.


Идём в <code>D:\Programs\PostgreSQL\lib\</code> и копируем оттуда <code>libpq.dll</code> (может лежать в другой директории, ищите поиском) в <code>D:\Programs\Qt\QtSources\4.8.1\src\plugins\sqldrivers\psql\</code>.
То же касается и библиотеки. Если не подхватит, то идём в <code>D:\Programs\PostgreSQL\lib\</code> и копируем оттуда <code>libpq.dll</code> в <code>D:\Programs\Qt\QtSources\4.8.1\src\plugins\sqldrivers\psql\</code>.


Теперь можно выполнить сборку. Кстати, выполните обе сборки: и <code>debug</code>, и <code>release</code>.
Теперь можно выполнить сборку. Кстати, выполните обе сборки: и <code>debug</code>, и <code>release</code>.
Строка 77: Строка 77:


В файле проекта дописать:
В файле проекта дописать:
<syntaxhighlight lang="cpp-qt">
<syntaxhighlight lang="cpp">
QT += sql
QT += sql
</syntaxhighlight>
</syntaxhighlight>


В исходниках формы на обработчик кнопки:
В исходниках формы на обработчик кнопки:
<syntaxhighlight lang="cpp-qt">
<syntaxhighlight lang="cpp">
void MainWindow::on_pushButton_clicked()
void MainWindow::on_pushButton_clicked()
{
{
Строка 107: Строка 107:
Если по материалам статьи ничего не получилось, то попробуйте [http://www.qtcentre.org/wiki/index.php?title=Building_the_QPSQL_plugin_on_Windows_using_MinGW сделать по этой инструкции]. У автора статьи, однако, ничего не получилось как раз по ней, после чего был опробован описываемый способ и написана настоящая статья.
Если по материалам статьи ничего не получилось, то попробуйте [http://www.qtcentre.org/wiki/index.php?title=Building_the_QPSQL_plugin_on_Windows_using_MinGW сделать по этой инструкции]. У автора статьи, однако, ничего не получилось как раз по ней, после чего был опробован описываемый способ и написана настоящая статья.


[[Категория:Qt]]
[[Категория:Погроммирование]]
[[Категория:PostgreSQL]]

Текущая версия от 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>")));
}

Скриншот приложения:

Загрузить исходники проверочного проекта можно здесь.

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