По привычке работы с WinApi возникает необходимость найти заменитель SendMessage, PostMessage, чтобы часть операций менее значимых и более ресурсоемких отложить на период обработки сообщений, а не во время выполнения обработчика прерывания или какого-либо тригера.

В Qt свои пользовательские виды события описываются отдельным классом, порожденным от QEvent

1
2
3
4
5
6
7
8
9
10
11
12
class MyEvent
: public QEvent
{
public:
MyEvent()
: QEvent( (QEvent::Type)(QEvent::User + 1) )
{}

private:

// --
};

Обработка сообщений осуществляется переопределением метода event в виджете

boolevent(QEvent *event);

? пример кода

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#define MY_EVENT_TYPE (QEvent::User + 1)

bool myWidget::event(QEvent *event)

{

if (event->type() == MY_EVENT_TYPE) {

MyEvent *myEvent = static_cast(event);

// custom event handling here

// do something...

return true;

}

return QWidget::event(event);

}

Отправка подобных сообщений осуществляется через класс приложения по методу post или send в зависимости от вашей ситуации

1
mApp->postEvent( this, new MyEvent() );

где mApp — указатель на класс приложения Qt

При этом после обработки память события будет автоматически освобождена.

Qt и очередь сообщений
Метки:    

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *