© EVILEG 2015-2018
Рекомендует хостинг
TIMEWEB
13 февраля 2018 г. 16:26

виджеты не в GUI потоке

qt, виджет, потоки, dll в потоке

Привет Всем! Вопрос такой,: Есть основное GUI приложение, в нем описан базовый класс для работы с различными потомками. Было решено вынести разные реализации потомков в dll. НО это еще не все. В силу того что каждая реализация потомка работает с аппаратурой- она выполняется в своем потоке. Настал момент когда очередной реализации потомка понадобились диалоговые окна. Немного в смятении, как реализовать сие хозяйство, не вынося работу с диалоговыми окнами в основное GUI? Хотелось бы их механизм взаимодействия(диалоговых окон) оставить в dll. Так как новичок в QT, подскажите как грамотнее решить проблему...Заранее благодарю...

Добрый день!

Смотрите. Дело в том, что виджеты Qt не работают в других потоках, кроме как в GUI потоке, так даже в официальной документации написано. Да и на форуме здесь уже обсуждалась проблема, когда нужно было вынести некоторые расчёты в отдельный поток. Виджеты так и не удалось вынести в отдельный поток. Всё решили через расчёт данных и передачи результатов в GUI поток с установкой результатов в виджеты.

Единственное, вроде у QtConcurrent что-то такое получалось в кастрированном варианте. Здесь на форуме были обсуждения с QtConcurrent, но я не рекомендую пользоваться теми обсуждениями, поэтому и ссылки давать не буду, там просто мраки человек писал :)

Что касается диалоговых окон, то я бы рекомендовал вам организовать ваш существующий проект, как subdirs проект, в котором будут подпроекты.
Главным подпроектом будет тот, что вы уже создали. А вторым будет подпроект ваших диалогов. Так вот второй подпроект нужно будет создать как динамическую библиотеку. Там будет заголовочный файл globals.h, в котором будет макрос LIBNAME_EXPORT, ну вы понимаете, что LIBNAME - это название вашей библиотеки будет. И везде, где Вам потребуется экспортировать классы из библиотеки, нужно будет подключать данный заголовочник globals (внутри только этой библиотеки естетственно) и прописывать этот макрос в объявлении класса. То есть примерно так будет выглядеть.
class LIBNAME_EXPORT MyDialog
{

};

Для Django рекомендую VDS-хостинг TIMEWEB

Ответы

Только авторизованные пользователи могут отвечать на форуме.
Пожалуйста, Авторизуйтесь или Зарегистрируйтесь
15 октября 2018 г. 21:36
Allyans .

C++ - Тест 001. Первая программа и типы данных

  • Результат 60баллов,
  • Очки рейтинга-1
15 октября 2018 г. 11:25
Екатерина Самойлова

C++ - Тест 002. Константы

  • Результат 33баллов,
  • Очки рейтинга-10
15 октября 2018 г. 11:17
Екатерина Самойлова

C++ - Тест 006. Перечисления

  • Результат 80баллов,
  • Очки рейтинга4
Последние комментарии
17 октября 2018 г. 8:43
pasagir

Qt/C++ - Урок 006. QSqlQueryModel - Таблицы в Qt с помощью SQL-запросов

Не получается bool DataBase::insertDataIntoDB(QVariantList data){ QSqlQuery query(db); QString str; qDebug()<<"InsertInsertInsertInsertInsert"<<QThread::curre...
17 октября 2018 г. 7:09
Евгений Легоцкой

Qt/C++ - Урок 006. QSqlQueryModel - Таблицы в Qt с помощью SQL-запросов

Попробуйте передать инстанс базы данных в конструктор QSqlQuery QSqlQuery q(db);
16 октября 2018 г. 16:14
pasagir

Qt/C++ - Урок 006. QSqlQueryModel - Таблицы в Qt с помощью SQL-запросов

В Qt 5.11. при попытке вставить в БД запись выдает ошибку QSqlQuery::prepare: database not openQSqlDatabasePrivate::database: requested database does not belong to the calling thread. ...
10 октября 2018 г. 9:50
Евгений Легоцкой

Qt/C++ - Урок 083. Создание динамической библиотеки и подключение её в другой проект

Если и начинать писать о плагинах, то нужно тогда с Qt Creator начинать, там наверняка будет одинаковый принцип, но по Qt Creator хотя бы информация есть.
Сейчас обсуждают на форуме
17 октября 2018 г. 16:33
Allyans .

Работа с WinAPI в QT(изменение title bar)

Здравствуйте. Я хочу в своей программе изменить цвет title bar. Так как в qt нет не каких функций связаных с этим я искал в интернете ответ на мой вопрос и там советовали функцию SetSysColors(...
17 октября 2018 г. 13:39
Михаиллл

Настройка Qt Creator для Android

Здравствуйте. У меня установлены SDK, NDK. Но для компилятора не хватает arm-linux-android-elf-64bit, 86-linux-android-elf-64bit . Скажите пожалуйста как это исправить?
15 октября 2018 г. 12:45
Allyans .

QGraphicsItem change color

Хорошо)
11 октября 2018 г. 10:13
Arrow

Работа с WebView в QML

Нашел в чем проблема. Пишу на случай если кому-то попадется такое же счастье с WebView как и мне. Проблема как оказалась с Debug версией, так как в Release и Profile все работает (...
10 октября 2018 г. 12:49
Виталий Антипов

Кто что делает на Qt?

Работаем по локальной сети. Файл базы, схемы и фото лежат на сервере. Чтобы не было проблем при одновременной работе с одним файлом, все запросы обернул в транзакции, как указано в документаци...
Присоединяйтесь к нам в социальных сетях