Re[15]: htmlayout в QT
От: c-smile Канада http://terrainformatica.com
Дата: 04.10.09 06:30
Оценка:
Здравствуйте, apin, Вы писали:

A>Здравствуйте, c-smile, Вы писали:


CS>>В файле /corelib/kernel/qeventdispatcher_win.cpp я вижу такой фрагмент:


CS>>
CS>>                if (!filterEvent(&msg)) {
CS>>                    TranslateMessage(&msg);
CS>>                    QT_WA({
CS>>                        DispatchMessage(&msg);
CS>>                    } , {
CS>>                        DispatchMessageA(&msg);
CS>>                    });
CS>>                }

CS>>


CS>>Вот в этот filterEvent(&msg) или что-то от него вызываемое и надо вставить мой вызов.


A>Уфф. Все оказалось не так очевидно, как кажется:

A>в main()

A>
A>   QApplication a(argc, argv);
A>   QAbstractEventDispatcher::instance()->setEventFilter(myEventFilter);
A>



A>
A>bool myEventFilter(void *message)
A>{
A>    HTMLayoutTranslateMessage((MSG*)message);
A>    return false;
A>}
A>

A> если возвращать return HTMLayoutTranslateMessage((MSG*)message);
A>как написано в комментах, к HTMLayoutTranslateMessage
A>* if( !HTMLayoutTranslateMessage(&msg) )
A>* TranslateMessage(&msg);
A>то не работает.

Круто. Круче (в смысле замороченней) чем в MFC (которая к слову тоже multiplatform framework).

A>вопрос к c-smile — Вы считаете разумным прогонять все события довольно большого приложения, через HTMLayoutTranslateMessage, даже если htmlayout используется эпизодически как диалог настройки например? Не внесет ли это лишние "тормоза"? Как вариант ставить фильтр при открытии окна и снимать при закрытии, но тогда придется отслеживать все открытые окна, вводить счетчик. Это все конечно дело техники , т.к. Вам виднее.


Что такое "довольно большого приложения"?
В любом случае количество окон в приложении как бы не увеличивает количество сообщений которые
постятся в input queue. Например при проносе мыши над окном ты получишь примерно одинаковое количество WM_MOUSEMOVE в случае отсутствия children или их наличия в количестве 10штук. Если я правильно понял вопрос.
При отсутствии popup или tool окон HTMLayoutTranslateMessage ничего не делает и так.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.