MYCSS

Показ дописів із міткою Qt. Показати всі дописи
Показ дописів із міткою Qt. Показати всі дописи

2016-09-15

Використання змінних з проект файлу Qt5 у С++ програмі

Наприклад у інтерфейсі програмі треба показати версію програми, визначаємо змінну VERSION у файлі .pro:
VERSION = 0.1.0
Але є проблема що у програмі це повинна бути string, обробляємо:
VERSTR = '\\"$${VERSION}\\"'
І додаємо оброблену зміну через визначення DEFINES:
DEFINES += VER=\"$${VERSTR}\"
Після цього можна використати у власній програмі .cpp:
#ifdef  VER
QString("version: %1 (Build: %2 %3)").arg(VER).arg(__DATE__).arg(__TIME__);
#endif
P.S. DEFINES визначає змінні макросів С препроцесора для qmake через ключ  -D (add_definition)

2016-06-18

Qt контрольована робота QRunnable, QThread, QThreadPool, на прикладі QWebSocket

За допомогою статті можна зробити контрольовану роботу QRunnable та QThreadPool у Qt.
Тобто передати результати роботу зовнішньому СЛОТУ.
Через симуляцію connect:
QMetaObject::invokeMethod(receiver, "updateProgressBar",
                                      Qt::QueuedConnection,
                                      Q_ARG(int, pFinished));


How to report progress and abort a long running operation with QRunnable and QThreadPool

P.S. Не забуваємо про попереднє використання qRegisterMetaType.
на кшталт 
qRegisterMetaType<QWebSocket*>(); 

2016-06-10

Розповсюдження готових програм створених за допомогою Qt у Ubuntu

Нова нотатка для себе.
Після компіляції програми у середовищі Qt  5.6 з використанням операційної системи Ubuntu 16.04 x64, стала задача перемістити програму на інший комп'ютер споживача, а не розробника.
Головна проблема що створити статичний файл програми не вийде у безкоштовній версії Qt, або може так я зрозумів. Для цього потрібно мати статично скомпільовану версію Qt. Тема про створення програм описана у документації Qt for Linux/X11 - Deployment.
Для роботи виконавчого файлу програми знадобляться динамічно завантажувальні бібліотеки. І головна задача зібрати усі бібліотеки що потрібні для роботи програми, на допомогу цьому прийде програма ldd (List Dynamic Dependencies). Вона покаже залежність, наприклад:
ldd ./Player 
 libesets_pac.so => /usr/lib/libesets_pac.so (0x00007f663b5ff000)
 libQtAV.so.1 => /home/lex/project-C/build/.../lib_linux_x86_64/libQtAV.so.1 (0x00007f663b221000)
 libQtAVWidgets.so.1 => /home/lex/project-C/build/.../libQtAVWidgets.so.1 (0x00007f663aff9000)
 libQt5Widgets.so.5 => /home/lex/Qt5.6.0/5.6/gcc_64/lib/libQt5Widgets.so.5 (0x00007f663a787000)
 libQt5Gui.so.5 => /home/lex/Qt5.6.0/5.6/gcc_64/lib/libQt5Gui.so.5 (0x00007f6639f8f000)
 libQt5Sql.so.5 => /home/lex/Qt5.6.0/5.6/gcc_64/lib/libQt5Sql.so.5 (0x00007f6639d4b000)
 libQt5Core.so.5 => /home/lex/Qt5.6.0/5.6/gcc_64/lib/libQt5Core.so.5 (0x00007f6639639000)
 libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f66392b6000)
...  

2016-03-04

Qt. Вбудува до вікна QWindow вікна зовнішньої програми.


Задача вбудувати роботу зовнішньої програми (mpv) до проекту Qt. Тобто створити вікно QWindow, і прикріпити до нього вікно зовнішньої програми. За результатами публікації створено цей код.

2016-01-16

Викорисатння ImageMagic у debug режимі. Qt5, C++.

Роблю собі нотатку.
Стала потреба тестувати С++ проект з середовища Qt5, де використовується API від проекту ImageMagic.

Якщо використати у режимі (debug)  Qt5 проект, то отримаємо помилки на кшталт цих:
Exception at 0x7ff9a2051f08, code: 0xe06d7363: C++ exception, flags=0x1
(execution cannot be continued) (first chance) in CORE_RL_Magick___!Magick::throwException "createIM Magick: unable to open module file `C:\\Users\\user\\.magick\\IM_MOD_RL_?\u0002?F?\u0001_.dll': No such file or directory @ warning/module.c/GetMagickModulePath/812"

2015-05-14

Перші спроби багатопотокового програмування Qt5 + OpenMP +MS Visual Studio

 Продовжуючи вивчати багатопотоковість з'ясував що бібліотека libraw має підтримку багатопотокового програмування - OpenMP.

Для використання потрібно дозволити компілятору використовувати OpenMP у  випадку MS  Visual Studio це вмикається так : OpenMP in Visual C++, /openmp (Enable OpenMP 2.0 Support)


Перші спроби багатопотокового програмування Qt5

Існує задача обробки зображень, по пікселям обробляється у циклі. 
Наприклад:
for (int i = 0; i < numPixels; i++, data += pixelSize) {
 if (output->colors == 3) {
  pixels[i * 4] = data[2 * colorSize];
  pixels[i * 4 + 1] = data[1 * colorSize];
  pixels[i * 4 + 2] = data[0];
 }
 else {
  pixels[i * 4] = data[0];
  pixels[i * 4 + 1] = data[0];
  pixels[i * 4 + 2] = data[0];
 }
}
З метою оптимізації розрахунку, спробую використати можливості багатопроцесорного комп'ютера.
Використовуючи фрейморк Qt 5.4.0. Створив новий клас IncTask. Вхідні дані до потоку можливо передати тільки під час ініціалізації класу. А надалі використовувати приватні змінні.
Коли забув ти рідну мову, біднієш духом ти щодня...
When you forgot your native language you would become a poor at spirit every day ...

Д.Білоус / D.Bilous
Рабів до раю не пускають. Будь вільним!

ipv6 ready