Народ, поясните кто в теме: как в qt(и не только)

грамотно организовать цикл обработки событий? То есть у меня есть несколько классов,один отвечает за медиа(звук и видео, воспроизведение), один за хранение данных вне программы(не БД), просто настройки, конфиги и пути, и проч., один класс отвечает за обмен данными по сети, и есть класс, внутри которого есть loop, в котором с помощью switch(case) реализуется собственно логика приложения: есть какие то события, которые ожидаются в цикле в этом классе, события приходят из других классов в виде сигналов и каждое событие соответственно, ожидается в своем case, и соответственно, результатом является отправка сигналов из этого класса в другие классы, через соединения их со слотами в MainWindow. Как вообще правильно писать подобные вещи? Есть ли какое руководство на эту тему?

4 ответов

6 просмотров

В Qt такие циклы не требуются. Под капотом у Qt есть QEventLoop, который, как раз таки, и обеспечивает правильную работу сигналов и слотов. Любые while(true) в мейн потоке будут вешать тебе гуи. Да, есть механизмы работы с таким, например метод QApplication::processEvents(), но это, скорее, костыль для подобных ситуаций. В твоем случае - тебе не нужен свитч с множеством ветвлений, просто отдельный метод на отдельный кейс. Нужно по сигналу от сетевого менеджера начать проигрывание видоса? Сделал сигнал в классе с сетью который передает данные, сделал слот который эти данные начинает проигрывать в медиаплеере, законнектил, и оно будет работать

Александр-G Автор вопроса
TheDoctor
В Qt такие циклы не требуются. Под капотом у Qt ес...

У меня рабочий цикл крутится в воркере в отдельном потоке. Видимо я не совсем точно описал проблему. Речь не о QEventLoop, а именно о методике. У меня в рабочем цикле есть куча степов, в каждом из которых может быть реализована логика в зависимости от нескольких условий: если а =x, b = y и так далее через время = x выполнить то, или emit какой-то сигнал.

Возможно, тебе подойдет паттерн наблюдатель(observer). Смотрю сейчас видос про него на коне.

S|с
screenshot Возможно, тебе подойдет паттерн наблюдатель(observ...

Еще у меня есть курс от Udemy - Udemy - Qt 5 Design Patterns 2020-8. У самого руки не дошли, но может кого заинтересует. https://drive.google.com/drive/folders/1rZdCuPCXlxrawldKjQRzb8R4HuQVbzYN?usp=sharing

Похожие вопросы

Обсуждают сегодня

коллеги привет. уже второй день бьемся об заклад с одной ошибкой, может вы сталкивались с таки странным поведением? есть тестовый сервер, на который паблишим релизную версию W...
Magzhan
11
Господа, а как такое в миграцию засунуть?
Денис Александрович
12
кто тебе сказал, что она угроблена? многие только начинают жизнь, после увольнения из Гугла, Майкрософта, Оракла,...
Alex Kom
9
Так а кто может спарсить всех участников чата? Идишники
Magic
18
В альтернативе у нас сидеть горбатиться на дядю в галерах, пока не помрешь или пока тебя не заменят более молодым сотрудником, который готов гребсти в два раза дешевле. Вот и ...
Кабан Кабанов
7
Желаю получить совет от великих ботмейкеров которые успешно поднимали ботов на несколько тысяч одновременно активных юзеров Какая чушь нужна людям прямо сейчас, и что стоило ...
ռɛ ʋɛʀʍօʀɛ
6
да пофиг на капчу зашел в чат и молчишь при этом ты нонейм? пошел вон
Magic
17
Слушайте, а при создании навигации на Tailor рили нельзя определять активный пункт навигации, как в Static Pages?
Pavel Lautsevich
2
Мне вот интересно jwt токен для подключения сторонего сайта к оду норм идея?
Andrij Moskivets
6
Какой максимальный размер caption у сообщений с фото? И учитываются ли в подсчете тэги форматирования? (<i>, <b>...)
Anton Shvets
4
Карта сайта