Добрый день, товарищи!
Доделываю это приложение.
Мне необходимо перехватывать все иксовые события, для этого я использую переопределение QApplication::x11EventFilter, как подсказано тут.
Все работает, но есть проблема.
Приложение состоит из основного виджета (сама панель) и нескольких диалогов. На моем ноутбуке и еще на некоторых машинах все нормально, но на остальных при попытке отобразить какой-либо диалог программа крашится.
После отладки я обнаружил, что проблема именно в переопределенном QApplication, без переопределения все работает. Выяснилось, что программа крашится при любом переопределенном QApplication, даже если в нем ничего нет, например:
class X11Application : public QApplication
{
Q_OBJECT
public:
X11Application(int argc, char **argv): QApplication(argc, argv) {}
};
Прочитав qapplication.h, я нашел в нем следующие строки:
#if defined(Q_WS_X11)
virtual bool x11EventFilter(XEvent *);
virtual int x11ClientMessage(QWidget*, XEvent*, bool passive_only);
int x11ProcessEvent(XEvent*);
#endif
Но даже после реализации обоих этих виртуальных функций приложение все равно крашится.
З.Ы. по ссылке выше описывается еще один метод перехвата всех иксовых событий: QAbstractEventDispatcher::instance()->setEventFilter(), но он у меня не работает.