LINUX.ORG.RU

QT: как организован цикл обработки сообщений?

 


0

1

Вот я знаком со структурой цикла сообщений в виндах. Там типа крутится цикл, а в другой процедуре получаются события через callback.

А как и где это организовано в Qt? И могу ли я и как его переопределить на свой цикл? (оставив свойство кросплатфоменности)

Ответ на: комментарий от EXL

Слушай, ты человеку такое даешь, когда он не знает Qt и задает вопросы наводящие на определенные мысли.

Я вот поддержу Adonai т.к. он хотя бы просто на доки дал ссыль.

deterok ★★★★★
()

Qt'шный цикл использует для своей работы механизмы конкретной платформы. Зачем тебе его «переопределять», какая цель? Если тебя интересуют события конкретного виджета, переопределяй соответствующие виртуальные функции (mousePressEvent() например). Если хочется получать вообще все события виджета в одном месте - переопределяй event().

m0rph ★★★★★
()
Последнее исправление: m0rph (всего исправлений: 1)

И могу ли я и как его переопределить на свой цикл? (оставив свойство кросплатфоменности)

В винде ты можешь создать QApplication и тупо юзать стандартный вендовый цикл вместо exec().

А вообще,

1. если тебе нужно добавить обработку файловых дескрипторов в цикл, то Qt позволяет это делать через QSocketNotifier.

2. если нужно добавить прослушку событий вендовых хендлов, то Qt позволяет это делать через QWinEventNotifier.

Pavval ★★★★★
()
Ответ на: комментарий от victor79

QEventLoop - это похоже то что нужно. Спасибо.

Он предназначен для запуска цикла в новом потоке (созданном не через средства Qt) или для прерывания текущей долгой вычислительной задачи и обработки событий ввода в главном потоке.

Он не предназначен для написания обычного однопоточного приложения или выполнения обычных задач в основном потоке.

quiet_readonly ★★★★
()
Последнее исправление: quiet_readonly (всего исправлений: 1)

Организовано это в классах, порожденных от QAbstractEventDispatcher (таких, как QEventDispatcherGLib, QEventDispatcherUNIX). Эти классы скрыты в недрах Qt Core (core_private).

Если хочешь перелпределить, смотри примеры, например, https://github.com/sjinks/qt_eventdispatcher_libev

Oxana
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.