28 июня 2014 г.

Статическая сборка svg-модуля Qt

Для получения поддержки SVG в проектах Qt, собранных статически, необходимо запустить командную строку (Меню Пуск->Все программы->Qt 5.3.0->5.3.0->MinGW 4.8 (32-bit)->Qt 5.3.0 for Desktop (MinGW 4.8 32 bit)
Перейти в каталог модуля SVG
cd E:\Qt\qt-5.3.0-Winx86-static\qtsvg\src
Запустить qmake, полученный при статической сборке Qt, с указанием дополнительного пути где искать необходимые файлы
E:\Qt\qt-5.3.0-Winx86-static\qtbase\bin\qmake.exe INCLUDEPATH+=E:/Qt/qt-5.3.0-Winx86-static/qtsvg/include src.pro
После чего выполнить команды
mingw32-make release и
mingw32-make debug
В папке E:\Qt\qt-5.3.0-Winx86-static\qtbase\plugins\imageformats должны будут появиться новые файлы qsvg.prl, qsvgd.prl, libqsvg.a, libqsvgd.a.
В файл проекта добавить строку
QT += svg
Теперь при статической сборке проекта svg-иконки будут отображаться на кнопках.

10 марта 2014 г.

Компиляция плагина QPSQL, используя MinGW

При создании небольшой программы потребовалось подключение к базе PostgreSQL, но соответствующий плагин оказался недоступен. На тот момент было установлено два комплекта Qt5.2.1 — собирающий проекты динамически установленный из официального установщика, и собирающий проекты статически.
Статическая сборка Qt из исходников была выполнена со следующими параметрами:
configure -static -platform win32-g++ -debug-and-release -opensource -nomake examples -no-compile-examples -fontconfig -no-vcproj -no-opengl -qt-sql-odbc -qt-sql-sqlite -plugin-sql-odbc -plugin-sql-sqlite -qt-style-windows -qt-style-windowsxp -qt-style-windowsvista

Чтобы добавить плагин QPSQL не требуется пересобирать Qt полностью.
Сперва, качаем исходники PostgreSQL 9.3.3 и zlib-1.2.8 и распаковываем их, например, в каталог E:\src.

Далее устанавливаем Msys (установил его из MinGW Installer).

Затем запускаем msys(файл C:\MinGW\msys\1.0\msys.bat). В появившемся окне консоли в переменную $PATH добавил каталог с mingw32-make, который шёл в комплекте с установочным комплектом Qt. Команда:
PATH=/E/Qt/qt-5.2.1-Windowsx86/Tools/mingw48_32/bin:$PATH

Переходим в каталог с распакованными исходниками PostgreSQL:
cd /E/src/postgresql-9.3.3

Конфигурирем с указанием пути, где искать заголовочные файлы zlib
./configre --includedir=/E/src/zlib-1.2.8

Запускаем сборку PostgreSQL
mingw32-make

По окончании сборки в каталоге E:\src\postgresql-9.3.3\src\interfaces\libpq
будут созданы необходимые нам файлы libpq.dll и libpq.a

Теперь текущее окно Msys можно закрыть. Приступим к сборке плагина QPSQL.

Запустим командную строку Qt (Меню Пуск->Все программы->Qt 5.2.1->5.2.1->MinGW 4.8 (32-bit)->Qt 5.2.1 for Desktop (MinGW 4.8 32 bit))

Перейдём в каталог с исходником PSQL:
cd E:\Qt\qt-5.2.1-Winx86-static\qtbase\src\plugins\sqldrivers\psql

Запустим qmake, полученный при статической сборке Qt, с указанием дополнительных путей где искать файлы и библиотеки собранного PostgreSQL:
E:\Qt\qt-5.2.1-Winx86-static\qtbase\bin\qmake.exe INCLUDEPATH+=E:/src/postgresql-9.3.3/src/include INCLUDEPATH+=E:/src/postgresql-9.3.3/src/interfaces/libpq LIBS+=E:/src/postgresql-9.3.3/src/interfaces/libpq/libpq.a psql.pro

После выполняем:
mingw32-make release и
mingw32-make debug

В каталоге E:\Qt\qt-5.2.1-Winx86-static\qtbase\plugins\sqldrivers
должны появиться файлы
libqsqlpsqld.a libqsqlpsql.a qsqlpsqld.prl qsqlpsql.prl

Создадим проект для проверки полученного плагина.
main.cpp:
#include <QCoreApplication>
#include <QSqlDatabase>
#include <QDebug>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
    db.setHostName("postgres.local");
    db.setDatabaseName("MyTestbase");
    db.setUserName("MyUser");
    db.setPassword("MyPass");
    if(db.open())
        qDebug() << "Connect to database";
    else
        qDebug() << "Not connected";
    return a.exec();
}


файл Static-qpsql.pro:
QT       += core sql
QTPLUGIN += qsqlpsql
QT       -= gui
TARGET = Static-qpsql
CONFIG   += console
CONFIG   -= app_bundle
TEMPLATE = app
SOURCES += main.cpp


Чтобы запускаемое из Qt Creator приложение могло использовать драйвер QPSQL, я скопировал полученный при сборке PostgreSQL файл E:\src\postgresql-9.3.3\src\interfaces\libpq\libpq.dll в E:\Qt\qt-5.2.1-Windowsx86\Tools\mingw48_32\bin. Этот же файл необходим в каталоге с экзешником программы при переносе её на другие компьютеры.

Скачать тестовый проект и файлы libpq.dll, libpq.a.