Небольшое лирическое отступление:
Написать эту заметку меня сподвигло наличие в интернете огромного количества инструкций которые просто цитируют документацию, а реально не работают. Т.к. я работаю с Qt время от времени, то не знаю как обстоят дела с данной проблемой в Qt5.
Проблема
В установку по умолчанию (по крайней мере для версии 4.8.4) драйвер для работы с Postgres не входит.
Официальная документация предлагает собирать его очень простым способом http://qt-project.org/doc/qt-4.8/sql-driver.html#qpsql, но если вы скачивали уже собранное Qt, то будете изрядно озадачены тем, что сборка проходит без ошибок, но ничего не работает.
Qt и SQL
Здесь следует слегка углубиться в особенности работы с sql-драйверами в Qt. Возможно два варианта их реализации:
- встраивание драйвера в библиотеку QtSql
- компиляция драйвера как plugin
При сборке Qt(http://doc.qt.digia.com/4.7/configure-options.html) за это отвечают следующие опции
- -qt-sql-<driver> Enable a SQL <driver> in the Qt Library.
- -plugin-sql-<driver> Enable SQL <driver> as a plugin to be linked to at run time.
Посмотреть какие драйверы в вашей инсталляции собраны как plugin'ы можно вот по этому пути:
%QTDIR%pluginssqldrivers
Решение
А теперь переходим к сути проблемы и её простому решению.
Насколько я понимаю, по-умолчанию, SQL драйверы собираются статически, т.е. для линковки с QtSql. Поэтому в результате сборки по документации у нас получаются только *.а файлы, которые к существующей QtSql4.dll ну никак не прицепишь. Выход который часто встречается в сети — пересобрать Qt целиком включив нужные драйверы при конфигурации. В принципе вариант нормальный, но вот только очень долгий.
Естественно мы можем вручную поправить make-файлы и собрать нужный драйвер как plugin, но это занятие неблагодарное — пусть компьютер делает это за нас.
Далее предполагается, что PostgreSQL с нужными библиотеками и заголовочными файлами установлен в C:psql (я обычно ставлю его в Program Files, а C:psql это junction).
Ну а дальше всё быстро и просто:
- Запускаем командную строку Qt (Пуск->Программы->Qt by Digia...->Qt x.x.x Command Promt)
- Конфигурируем исходники и включаем нужный драйвер как plugin
configure -I "c:psqlinclude" -L "c:psqllib" -plugin-sql-psql
cd srcpluginssqldriverspsql
qmake psql.pro
make debug
make release
Проверяем %QTDIR%pluginssqldrivers. Бинго!
Автор: magnitudo