Как я могу интегрировать новые окна Qt с существующим приложением X?

У меня есть существующее (большое) приложение X на основе сырого XLib. Я хотел бы добавить дополнительные окна в это приложение, используя Qt 4. Каков наилучший способ сделать это?

Исследования до сих пор:

(Если это важно для деталей, я сейчас смотрю на Qt 4.7.4.)

Мои существующие вызовы приложений XtAppNextEvent в цикле для обработки своих событий. Я надеюсь заменить этот цикл событий на цикл событий на основе Qt, позволить Qt обрабатывать свои собственные события и делать вызовы XtDispatchEvent для не Qt событий.

Я нашел часть Qt, которая обрабатывает события X (в src/gui/kernel/qapplication_x11.cpp, QApplication::x11ProcessEvent). Я считаю, что ключевой частью этой функции является:

QETWidget *widget = (QETWidget*)QWidget::find((WId)event->xany.window);

который определяет, относится ли событие к окну, о котором знает Qt. Для не-Qt окон это возвращает NULL, После этого есть несколько исключений обработки, затем блок, такой как:

if (!widget) {                     // don't know this windows
QWidget *popup = QApplication::activePopupWidget();
if (popup) {
// ... bunch of stuff not involving widget ...
}
return -1;
}

Я надеялся, что в этот момент будет обратный вызов события, который вызывался для не связанных с Qt оконных событий, поэтому я мог просто реализовать виртуальную функцию в своем производном QApplication и продолжить обработку существующего события приложения. Я могу добавить такую ​​функцию и пересобрать Qt, но я бы предпочел этого избежать, если это возможно.

Я на правильном пути с этим, или может быть лучший путь?

Я нашел существующие вопросы, подобные этому, но они все для Windows (MFC или .NET). Это специфично для X.

1

Решение

Решение, которое я выбрал, заключалось в том, чтобы найти копию Расширение Qt Motif (он больше не доступен напрямую из Digia, так как теперь не поддерживается, но вы все равно можете найти копии qtmotifextension-2.7-opensource.zip). Там qtmotif.h а также qtmotif.cpp модули показывают, как создать QAbstractEventDispatcher он обрабатывает события X для компонентов Xt / Motif и Qt.

1

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector