Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.14.83] |
|
Сообщ.
#1
,
|
|
|
Буэнос диас, амигос!
Тема возникла ну почти внезапно, с подачи нашего форумчанина Rodion... Маленькая предыстория Я помню свои первые мучительные "изыскания" в 2011 году c Qt5. Тема хорошая, прекрасная - но геморроя просто выше крыши. А тот проект по времени поджимал просто адово! Слава Богам я набрел на проект mxe.cc, проникся, поставил его на виртуальную машину под линуха (ныне это Linux Manjaro) и просто забыл о бедах. Ну ваапще и полностью забыл! Однако часто вижу в сети страдальцев "а-ля - не могу собрать драйвер БД в Qt". И после этого меня всегда настигает эмпатия в виде нестерпимой боли! Но сегодня я почти кросава - я напрягся и вспомнил, видел в сети проект MSYS2. Да, это не полная виртуализация, скорее эмуляция. Но там все собирается с пакетов, а-ля арч-линукс! Используя утиль"pacman". Плюсики Минусики Начинаем пользоваться MSYS2 Сперва выкачиваем дистрибутив со странички https://www.msys2.org и устанавливаем. Особое внимание на предупреждение с того сайта "Enter your desired Installation Folder (short ASCII-only path on a NTFS volume, no accents, no spaces, no symlinks, no subst or network drives, no FAT". Поэтому я выбираю путь установки: E:\Tools\MSys64. Все последующие действия проводим с терминале MSYS2, который запускается командой E:\Tools\MSys64\msys2_shell.cmd Сперва обновим репозитарий: pacman -Suy После этого MSYS2 попросит закрыться. Открываем окно терминала заново и продолжаем установку нужных нам пакетов: pacman -S --noconfirm mc patch colordiff gdb cmake pacman -S --noconfirm mingw-w64-x86_64-gcc mingw-w64-x86_64-gdb mingw-w64-x86_64-cmake mingw-w64-x86_64-extra-cmake-modules pacman -S --noconfirm mingw-w64-i686-gcc mingw-w64-i686-gdb mingw-w64-i686-cmake mingw-w64-i686-extra-cmake-modules pacman -S --noconfirm mingw-w64-x86_64-qt5 mingw-w64-x86_64-qt5-static mingw-w64-x86_64-qt5-doc pacman -S --noconfirm mingw-w64-i686-qt5 mingw-w64-i686-qt5-static mingw-w64-i686-qt5-doc pacman -S --noconfirm mingw-w64-x86_64-postgresql mingw-w64-i686-postgresql pacman -S --noconfirm mingw-w64-x86_64-libmariadbclient mingw-w64-i686-libmariadbclient pacman -S --noconfirm mingw-w64-x86_64-make mingw-w64-i686-make pacman -S --noconfirm mingw-w64-x86_64-jom mingw-w64-i686-jom В результате подставилось следующее: А также для двух комплектов туллчейнов x86_64 и i686 поставилось: Важное замечание: Почему процедура установки представлена не одной командой? Все просто. Достаточно редко, но все же, в процессе установки бывают сбои а-ля "SSL timeout..." при выкачивании файлов. Бывает. Решается это повторным запуском той же команды через 1-2 мин. Однако в этом случае команда переустанавливает весь софт, который уже успела установить. Вот именно для предотвращения этого мы устанавливаем "порциями". Одну команду запустили, проверили, нет ошибок, запускаем следующую. Если ошибка есть, повторяем запуск, пока не получим установку без ошибок. Установка QtCreator Есть два варианта: Первый вариант - зе бест! Но, если вы из России или из Беларуси, в процессе установки готовьтесь увидеть сообщение "Your IP not allowed", ну или что-то в этом духе. Вы наверное спросите "как это пониматьвашу?". Ответ простой: санкции. Я нашел простой выход. Прописал в установщике работающий HTTP-proxy из Франции и на санкции был положен уверенный белорусский болт! Установка была произведена успешно. Второй вариант - так себе, если не прошел первый. Ставим QtCreator прямо из MSYS2: pacman -Ss qt-creator pacman -S --noconfirm mingw-w64-x86_64-qt-creator QtCreator поставится, но подтянет за собой кучу "мусора" из Qt6. Запуск его ищем в недрах MSYS2, что-то а ля qtcreator.exe Настройка QtCreator Желательно и настоятельно ... Не полагаться на авто-найденные установки, а сделать все вручную (сперва все удОлить). Запускаем QtCreator и открываем "Настройки". До 8-й версии QtCreator они находились в меню "Инструменты", а в 8-й версии они "переехали" в меню "Правка". Нас интересует закладка "Комплекты". В этой закладке видим набор свойств в таб-барах: Мы начинаем настройку с конца в начало, с CMаке. CMake Отладчики Тут я ничего не правил - меня это устроило. Компиляторы Авто-найденные я оставил как есть. Но руками добавил нужные мне: Профили Qt Заполняем. Для статической сборки с QML небольшие траблы. Кому это важно - постарайтесь развидить эту статью. Комплекты Тут собираем все, учитывая учтановленные нами туллчейны. Следим за стрелочками. А в красной рамочке - "вишенка" Это позволит в процессе разработки в окне вывода видеть отладочную информацию о загрузках Qt-плагинов: На этом все - рабочая настроенная среда готова. Пора действовать!!! Устанавливаем и запускаем сервер БД Давайте замутим тест работы с базами данных. Среда разработки есть - баз данных нет. Не проблема, решаем! Заходим на сайт просто прекрасных людей https://ospanel.io, выкачиваем и устанавливаем OpenServer. Настройки последнего я расписывать не буду, но сообщу - они есть! А для создания БД и таблиц пользуемся инструментами: Тестовый тест В QtCreator создаем проект - файлы его будут ниже. А в OpenServer запускаем PostgreSQL и MySQL, и создаем БД и таблицы. Что создавать - смотрим код проекта. HelloDatabases.pro QT += core gui sql greaterThan(QT_MAJOR_VERSION, 4): QT += widgets CONFIG += c++17 SOURCES += \ main.cpp \ dialog.cpp HEADERS += \ dialog.h qnx: target.path = /tmp/$${TARGET}/bin else: unix:!android: target.path = /opt/$${TARGET}/bin !isEmpty(target.path): INSTALLS += target main.cpp #include "dialog.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); Dialog w; w.show(); return a.exec(); } dialog.h #ifndef DIALOG_H #define DIALOG_H #include <QtWidgets> #include <QtSql> class Dialog : public QDialog { Q_OBJECT QTableView *Pt,*Pm; QSqlQueryModel *Mp, *Mm; QPushButton *BtnP, *BtnM, *BtnClose; QSqlDatabase DbPgSql,DbMySql; public: Dialog(QWidget *parent = nullptr); ~Dialog() {}; public slots: void SlotPgSQL(); void SlotMySQL(); }; #endif // DIALOG_H dialog.cpp #include "dialog.h" Dialog::Dialog(QWidget *parent) : QDialog(parent) { QGridLayout *L = new QGridLayout; QLabel *L1 = new QLabel("PostreSQL:"); QLabel *L2 = new QLabel("MySQL:"); Pt = new QTableView; Pm = new QTableView; BtnP = new QPushButton("Прочесть"); BtnM = new QPushButton("Прочесть"); BtnClose = new QPushButton("Close"); L->addWidget(L1,0,0,1,2); L->addWidget(BtnP,0,2,1,2,Qt::AlignRight); L->addWidget(Pt,1,0,1,4); L->addWidget(L2,2,0,1,2); L->addWidget(BtnM,2,2,1,2,Qt::AlignRight); L->addWidget(Pm,3,0,1,4); L->addWidget(BtnClose,4,3,1,1); setLayout(L); setMinimumSize(640,480); resize(0,0); connect(BtnP, &QPushButton::clicked, this, &Dialog::SlotPgSQL); connect(BtnM, &QPushButton::clicked, this, &Dialog::SlotMySQL); connect(BtnClose, &QPushButton::clicked,this, [&](){close();}); } void Dialog::SlotPgSQL() { if (!DbPgSql.isOpen()) { DbPgSql = QSqlDatabase::addDatabase("QPSQL","First"); DbPgSql.setHostName("127.0.0.1"); DbPgSql.setDatabaseName("postgres"); DbPgSql.setUserName("postgres"); DbPgSql.setPassword(""); if (!DbPgSql.open()) { QMessageBox::warning(this,"Oops!","С базой PostgreSQL пошло штото нетак!"); return; } } Mp = new QSqlQueryModel(this); QSqlQuery Q("SELECT * FROM pg_example",DbPgSql); Mp->setQuery(Q); Pt->setModel(Mp); } void Dialog::SlotMySQL() { if (!DbMySql.isOpen()) { DbMySql = QSqlDatabase::addDatabase("QMYSQL","Second"); DbMySql.setHostName("127.0.0.1"); DbMySql.setDatabaseName("my_example"); DbMySql.setUserName("root"); DbMySql.setPassword("root"); if (!DbMySql.open()) { QMessageBox::warning(this,"Oops!","С базой MySQL пошло штото нетак!"); return; } } Mm = new QSqlQueryModel(this); QSqlQuery Q("SELECT * FROM my_table",DbMySql); Mm->setQuery(Q); Pm->setModel(Mm); } После сборки запускаем и кликаем на кнопки и видим загрузку данных с разных БД - PostgreSQL и MySQl баз: Подбиваем итоги Надеюсь, что был полезен. Вспоминая меня добрым словом, вы реально прогрузите мою энергию ЦЫ, столь необходимую для моего обмена веществ! Peace!!! |