LINUX.ORG.RU

Перехват иксовых событий

 ,


0

1

Добрый день, товарищи!

Доделываю это приложение.

Мне необходимо перехватывать все иксовые события, для этого я использую переопределение 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(), но он у меня не работает.

★★★★★

Неужели никто так ничего и не посоветует?

Придется читать исходники QApplication.

unfo ★★★★★ ()

Гм, заработало, практически само.

После замены строки

X11Application(int argc, char **argv);

на

explicit X11Application(int& argc, char **argv);

Вместе с реализацией обеих иксовых виртуальных функций.

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

Ага, ты мне уже давал эту ссылку в первой теме и выкладывал примеры, спасибо еще раз, я ее изучил + исходники razor-qt.

Основная функциональность готова была еще весной, сейчас я опять вернулся к этому проекту, тестирую на разных машинах и правлю баги.

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