Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: spirits25 от Июня 06, 2012, 16:34



Название: Отловить Ctrl-C в gui
Отправлено: spirits25 от Июня 06, 2012, 16:34
Доброе время суток.
Есть любой виджет.. абсолютно произвольный. запускаю программу из консоли. по нажатию комбинации ctrl-c ничего не происходит до любого действия. а лишь потом:
Код:
^CTraceback (most recent call last):
  File "/usr/lib64/python2.7/site-packages/fffff/ffffff/fff.py", line 124, in mousePressEvent
    def mousePressEvent(self, event):
KeyboardInterrupt
вылетает прерывание на том действии. Как отловить знаю, но в таком случае не понятно где, ведь действие может быть любое. Собственно что нужно делать, чтобы ctrl-c сразу можно было отловить?


Название: Re: Отловить Ctrl-C в gui
Отправлено: kambala от Июня 06, 2012, 17:45
по идее достаточно повесить eventFilter на qApp - через него проходят все события


Название: Re: Отловить Ctrl-C в gui
Отправлено: spirits25 от Июня 07, 2012, 08:10
по идее достаточно повесить eventFilter на qApp - через него проходят все события
Если Вы имели ввиду переопределить QtGui.QApplication и там в eventFilter отлавливать (точнее переопределить в нём один метод eventFilter), то не помогло. Или я не так понял?


Название: Re: Отловить Ctrl-C в gui
Отправлено: kambala от Июня 07, 2012, 12:26
не совсем. если ты решил идти через наследование, то лучше уж переопределять метод event(). а если хочешь именно eventFilter, тогда в конструкторе какого-нибудь класса надо написать qApp->installEventFilter(this) и наследоваться от QApplication не нужно.


Название: Re: Отловить Ctrl-C в gui
Отправлено: spirits25 от Июня 07, 2012, 14:18
не совсем. если ты решил идти через наследование, то лучше уж переопределять метод event(). а если хочешь именно eventFilter, тогда в конструкторе какого-нибудь класса надо написать qApp->installEventFilter(this) и наследоваться от QApplication не нужно.
от qApp->installEventFilter(this) вообще ничего не меняется.
от "переопределять метод event()" все прерывания срабатывают в одном месте (уже хорошо), но всё равно не могу отловить, так как срабатывает в объявлении функции (в первой строке), где прерывание не отловить.
Код:
Traceback (most recent call last):
  File "/usr/bin/wwww", line 22, in event
    def event(self, e):
KeyboardInterrupt
Как можно там поймать её?