Архив рубрики: Qt

MessageBox

Простой Message Box без обработки вариантов ответа:

«Умный» Message Box с обработкой вариантов ответа:

Несколько «быстрых» вариантов создания MessageBox:

Qt5 static с драйвером PostgreSQL

В данной статье я опишу как собрать статический Qt5 с драйвером PostgreSQL.

Скажу сразу, что с Qt5.8 у меня собрать статическую сборку с поддержкой PostgreSQL не получилось. Поэтому взял предыдущую версию Qt 5.7.1 с официального сайта.
Для сборки Qt также понадобится Perl.

Сборка PostgreSQL

Чтобы драйвер PostgreSQL собрался, нам понадобятся библиотеки libpq и h-файлы (использовал эту статью), поэтому:
1. Качаем исходные коды PostgreSQL.
2. Собираем их компилятором mingw32, для чего:
2.1. Ставим утилиту msys, которая входит в состав MinGW.
2.2. В папке с msys заходим в папку etc/ и открываем файл fstab. В этом файле вы увидите строчку формата: C:/mingw /mingw
Первую часть необходимо заменить на ваш путь до MinGW, в моём случае эта строка стала выглядеть следующим образом: C:/QtDyn58/Tools/mingw530_32 /mingw
Сохраняем изменения и запускаем MSYS (файл msys.bat).
2.3. Переходим в папку с postgreSQL, в моём случае это выглядит так:
cd /с/PG963dev
2.4. Запускаем конфигурирование postgreSQL, в моем случае:
configure --without-zlib --prefix=/c/PG963inst (руководствовался этим)
2.5. Далее make && make install

В результате должны появиться папки:
C:\PG963inst\include
C:\PG963inst\lib

В папке lib появятся библиотеки libpq.a и libpq.dll, которые нам понадобятся дальше.

Сборка Qt
Для сборки Qt рекомендую создать bat файл.
Подключить собранный postgresq строчками -I C:\PG963inst\include -L C:\PG963inst\lib у меня не получилось.
Поэтому в файле (руководствовался этим этим)
C:\qt-everywhere-opensource-src-5.7.1\qtbase\src\sql\drivers\psql\qsql_psql.pri
я добавил следующие строчки:
INCLUDEPATH += "C:\PG963inst\include"
LIBS += -L"C:\PG963inst\lib" -llibpq

Bat-файл взял здесь) .
Важно не забыть прописать пути к Perl и использовать ключ -qt-sql-psql при конфигурировании.
У меня он получился такой:

После успешной сборки в статическом проекте добавляем строчку в .pro файл
QMAKE_LFLAGS_RELEASE += -static -static-libgcc и кладем файл libpq.dll в папку с исполняемым файлом.

Работа с указателем на QVector

Имеется указатель на QVector:

Для изменения значений в массиве необходимо использовать следующую конструкцию:

Круглые скобки необходимы для правильной последовательности операций.
1. Сначала разыменовываем указатель (*p_vector) = QVector;
2. Затем для доступа к элементу с позицией по определённому индексу используем operator[].

Qwt и Qt Creator OpenSUSE

1. Качаем Qwt.
2. Распаковываем и собираем:

3. В файле проекта добавить строки:

Qwt и Qt Creator Windows 7 MinGW

1. Качаем Qwt .
2. Проверяем переменные окружения:
Для Qt:
PATH: C:\Qt\Qt5.4.2\Tools\mingw491_32\bin;C:\Qt\Qt5.4.2\5.4\mingw491_32\bin
3. Переходим в папку с распакованным qwt и компилируем:

По умолчанию библиотека собирается в C:\Qwt-6.1.2
4. Добавляем переменные окружения для qwt:
PATH: C:\Qt\qwt-6.1.2\lib
Здесь же, под списком «Пользовательские переменные» нажать «Новый» и добавить пару следующих переменных:
Имя: QT_PLUGIN_PATH
Значение: C:\Qwt-6.1.2\plugins
Имя: QMAKEFEATURES
Значение: C:\Qwt-6.1.2\features

5. В проекте Qt, файл c расширением «.pro» и добавить снизу строчку «CONFIG += qwt» (здесь и далее кавычки не являются частью синтаксиса и используются лишь для удобства чтения).
6. Заголовочные файлы:

7. Полотно:

8. Декорирование полотна:

9. Кривая:

Windeployqt

Для Windows у QT есть утилитка
windeployqt.exe
пример:

Автоматическое развертывание

Чтобы windeployqt запускалась автоматически, можно в файл проекта *.pro добавить следующую строчку:

где $$OUT_PWD/$$DESTDIR задает папку с исполняемым файлом. Задание папки не универсально и работает если в DESTDIR указан относительный путь.

gSoap

http://habrahabr.ru/post/174109/
Сначала делаем Хидер из wsdl
wsdl2h TEST.xml
Затем генерируем классы
soapcpp2 -j -C -d .. -s -x -I /usr/share/gsoap/import/ TEST.xml.h
-d — место назначения

В файл проекта Qt добавить:
CONFIG += link_pkgconfig
PKGCONFIG += gsoap++
И добавить все сгенерированные файлы.

Отслеживание пакетов по порту:
tcpdump -s 0 -A -i eth0 port 1580

http://www.prog.org.ru/topic_16542_0.html
http://sourceforge.net/p/gsoap2/wiki/Home/
http://qsoapman.sourceforge.net/
http://en.wikipedia.org/wiki/GSOAP