13 февраля 2018 г. 16:26

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

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

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

  • #
  • 13 февраля 2018 г. 21:05

Добрый день!

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

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

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

};

Ответы

Только авторизованные пользователи могут отвечать на форуме.
Пожалуйста, Авторизуйтесь или Зарегистрируйтесь
22 февраля 2018 г. 18:58
Oleg_kgd

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

  • Результат 66 баллов
  • Очки рейтинга -1
21 февраля 2018 г. 19:18
sentinel

Qt - Тест 001. Сигналы и слоты

  • Результат 78 баллов
  • Очки рейтинга 2
21 февраля 2018 г. 11:32
barilla

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

  • Результат 0 баллов
  • Очки рейтинга -10
Последние комментарии
22 февраля 2018 г. 16:42
soz7557

Qt/C++ - Урок 029. Изображение в базе данных в Qt – Сохранение и Восстановление

Hi, could you please show how to delete file from image Blob?  also if the same image exist in Blob then don't over write..

21 февраля 2018 г. 8:37
EVILEG

Qt/C++ - Урок 027. Полиморфизм в Qt на примере геометрических фигур в QGraphicsScene

Добрый день! 1) Эллипс можно реализовать так void Ellipse::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget){ painter->setPen(QPen(...

20 февраля 2018 г. 22:10
Log159

Qt/C++ - Урок 027. Полиморфизм в Qt на примере геометрических фигур в QGraphicsScene

Здравствуйте! В программировании новичок и есть пара вопросов. Буду очень благодарен за ответ. Не совсем понимаю как: 1) реализовать подобным образом рисование эллипса(конкре...

18 февраля 2018 г. 14:42
EVILEG

QML - Урок 019. Navigation Drawer в Qt Qml Android

Да, теперь представляю, как то работает. Согласен, ваша правка определённо к месту здесь.

Сейчас обсуждают на форуме
21 февраля 2018 г. 22:19
vitaliy_antipov

Проблема с ComboBox

Спасибо за ответы, есть над чем подумать

21 февраля 2018 г. 13:26
sol11

Qtableviev после сортировки

Спасибо, всё заработало :) Единственное вот тут row на id поменял и всё круто :)) if(id == -1){ model->insertRow(model->rowCount(QModelIndex())); map...

20 февраля 2018 г. 13:18
alex_lip

Разбить один qml файл на несколько составляющих

Да спасибо. Просто после необходимости специфичных названий для файла - стараюсь обращать внимание на любую мелочь.

20 февраля 2018 г. 8:13
EVILEG

Передача файлов в django минуя временные папки django и nginx

Тогда я даже и не знаю, прошерстил документацию, но там нет информармации о возможности отключения сохранения временных файлов. Как я понял временные файлы используются, когда тело запро...

18 февраля 2018 г. 12:34
EVILEG

QGraphicsView

Добрый день!QGraphicsView - это виджет, а значит, что в качестве парента для него выступает QWidget, а не QObject.То есть из ошибок, которые сразу бросаются в глаза в этом коде, здесь прису...