Проще заменить qDebug() на qDebug().noquote() qDebug().noquote()<<QString(...);
PS: QDebug - блокирующий тормоз, если у вас куча их в разных тредах. Следует сделать один поток который по слоту записывает или выводит лог, а все остальные чтобы ему это присылали.
К наследникам QWidget можно обращаться только из главного потока.
Вам нужен слот надлежащий главному потоку, в который передавайте данные для сообщения, и в слоте вызывайте QMessageBox.
Подключать QObject::connect надо с двумя объектами или явно указать тип. Если третий параметр пропустить, то по умолчанию произойдет Qt::DirectConnection и слот выполниться в потоке сигнала.
Общение между тредами должно быть только через сигнал слот. Следственно остановить таймер без сигнала нельзя.
Удалять таймер так же следует в том треде в котором он создан.
Ошибка означает что линковщик не может записать бинарный файл.
Файл занят либо ОС которая достает из него значок, или если программа запущена.
Посмотрите в процессах и прибейте его.
А так же не оставляйте в Explorer открытой папку где видно бинарник.
https://wiki.qt.io/Building_a_static_Qt_for_Window...
1) надо компилятор скомпилированный статически
2) скомпилировать компилятором 1. сам Qt SDK тоже статически
И никаких зависимостей не будет.
Имейте ввиду что Qt 5.9 не работает на ХР, а последний работающий на XP - Qt 5.6
Если у вас линукс или мак то будет еще проще, просто запустить mxe.cc/#tutorial
И получится кросс компиляция без зависимостей.
Подключайте OpenSSL 1.0.х скомпилированный статически и проблем не будет.
Или таскайте вместе с ехе файлом libeay32.dll и ssleay32.dll https://slproweb.com/products/Win32OpenSSL.html
А если так и есть, то проверьте кореневые сертификаты.
Если вам нужно подключение только к одному хосту, то можете в ресурсах программы CA сертификат хранить, или устанавливать CA сертификат в ОС как доверенный.
1. TCP не особо и плох. Сомневаюсь что у вас будет больше 1000 сокетов одновременных.
2. Можно использовать SQLite файл, и напрямую проганять через него клиентские команды, а можно и на QHash организовать подобие базы, а на Qt Script принимать запросы. Первый вариант проще.
Надо минимизировать количество пере-подключений TCP, создавая каждый раз сокет или QNetworkAccessManager в QRunnable вы делаете переподключение.
QNetworkAccessManager не оптимален для вашей задачи, он преспособлен для загрузки сайтов. В нем по умолчанию есть 4 сокета и используются параллельно для запросов. Советую сделать примитивную реализацию HTTP на QSslSocket/QTcpSocket, чем проще тем лучше.
Сомневаюсь что у вас там 10 тыс камер, так что оптимальный вариант - запустить отдельный QThread для каждого подключения камеры, поддерживать его и доставать изображения с интервалом. Дальше указатель на данные изображения отправлять в накопительный QThread, который будет возвращять json по запросу.
Удобнее всего рисоваь на QPixmap с помощью QPainter.
Сохранить QPixmap и перерисовывать при изменениях или ресайзе.
Засунуть QPixmap можно в QLabel и положить где угодно.
Но если изменения слишком частые то следует использовать решение от TriKrista