Как перехватить ВСЕ сигналы, излучаемые данным событием в Qt? - PullRequest
9 голосов
/ 15 января 2010

Я могу представить, что их может быть довольно много, в зависимости от события, но в то же время, я думаю, это может быть лучшим способом отладки и интересным уроком.

ЗачемМне это надо?Я использую некоторый пользовательский класс, основанный на QWidget, который не расширяется, когда я отсоединяю QDockWidget, основанный в том же окне.Знание того, какие сигналы испускаются при отсоединении этого виджета, поможет мне выбрать метод, который мне нужно перезаписать в моем пользовательском классе.

Другими словами, я не хочу проверять все возможные сигналыиз документации, но только посмотрите, какие сигналы испускаются, когда я выполняю какое-то действие в моем приложении.

Ответы [ 4 ]

10 голосов
/ 16 января 2010

Это невозможно с любым открытым API.

Но, если вы поместите свой код в модульный тест на основе QTestLib, вы можете запустить модульный тест с помощью -vs, чтобы распечатать каждый излучаемый сигнал.

7 голосов
/ 15 января 2010

Возможно, вы захотите взглянуть на класс QSignalSpy . Я думаю, что вы должны вручную подключить сигнал, который вы хотите шпионить.

2 голосов
/ 15 января 2010

Я не думаю, что это возможно с Qt. Вы можете

  • перечислить все сигналы класса, используя QMetaObject :: method и QMetaMethod :: methodType;
  • прикрепите один из ваших собственных слотов ко всем этим сигналам;
  • проверить, кто вызвал слот, используя QObject :: sender.

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

0 голосов
/ 03 ноября 2010

Проверьте шпионаж сигнала . Получил некоторое представление о библиотеке QT и слежке за сигналами / слотами.

...