Политика конфиденциальностиКонтактыО сайтеОтзывыGitHubDonate
© EVILEG 2015-2018
Рекомендует хостинг
TIMEWEB
F
13 февраля 2018 г. 16:26

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

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

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

1

Добрый день!

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

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

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

};
0

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
v
17 января 2019 г. 11:51
vitalir12

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:20баллов,
  • Очки рейтинга-10
v
17 января 2019 г. 11:49
vitalir12

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

  • Результат:50баллов,
  • Очки рейтинга-4
v
17 января 2019 г. 11:13
vitalir12

C++ - Тест 003. Условия и циклы

  • Результат:28баллов,
  • Очки рейтинга-10
Последние комментарии
I
16 января 2019 г. 8:06
IscanderChe

Заработало. Забыл model->select(); вписать.
I
16 января 2019 г. 8:02
IscanderChe

Всё равно пусто, хотя строка с данными в базу добавляется.
16 января 2019 г. 7:51
Евгений Легоцкой

потому, что нужно сохранять информацию для всех остальных ролей и столбцов через вызов переопределённого метода. Да к тому же вы ещё и зациклили вызов метода data. QVariant MySqlTableModel:...
I
16 января 2019 г. 7:43
IscanderChe

Сделал вот так. В tableView ничего нет, кроме заголовка. QVariant MySqlTableModel::data(const QModelIndex &index, int role) const{ if (role == Qt::DisplayRole) { QTime ...
Сейчас обсуждают на форуме
18 января 2019 г. 11:26
nayk1982

Для Desktop делал так: void pause(int ms){ QTimer timer; timer.setInterval( qBound(1, ms, 3600000) ); timer.setSingleShot(true); QEventLoop loop; QObject::connect(&...
17 января 2019 г. 12:01
Алексей Внуков

у меня просто есть отдельное поле с чекбоксамими какие колонки нужно отображать CheckBox { id: checkBox text: qsTr("some text") checked: true onC...
15 января 2019 г. 16:53
Михаиллл

Спасибо, заработало.Но выдало обычный текст без форатирования HTML.Придется искать дальше
15 января 2019 г. 12:52
BlinCT

Я же вам выше написал CLion умеет работать с ремоут машинами. И Qt так же собирает.
Присоединяйтесь к нам в социальных сетях

Для зарегистрированных пользователей на сайте присутствует минимальное количество рекламы