QT QWidget нажмите - PullRequest
       4

QT QWidget нажмите

22 голосов
/ 26 октября 2010

У меня есть свой собственный класс, основанный на QWidget. Я поместил этот виджет в QMainWindow, и мне нужно поймать щелчок мышью на этом виджете.

Я пытался:

connect(my_widget, SIGNAL(clicked()), this, SLOT(exit(0)));

Но ничего не происходит. Как я могу это сделать?

Ответы [ 2 ]

30 голосов
/ 26 октября 2010

QWidget не имеет сигнала clicked (), а QMainWindow не имеет слота exit ().Невозможно подключиться к несуществующему сигналу и несуществующему слоту.Возвращаемое значение соединения должно быть истинным, если соединение установлено успешно.Проверьте это значение, когда вы устанавливаете соединения, чтобы убедиться, что ваш код будет работать правильно.

Чтобы выйти из приложения, вы должны вызвать qApp->quit()

Кроме того, как было упомянуто другими,вам нужно будет установить eventFilter или переопределить методы

void QWidget::mousePressEvent ( QMouseEvent * event )   [virtual protected]

или

void QWidget::mouseReleaseEvent ( QMouseEvent * event )   [virtual protected]

.

В официальном документе Qt есть множество примеров this например, переопределяет метод mousePressEvent(QMouseEvent *event).

Для опции eventFilter см. этот маленький пример.

Надеюсь, это поможет.

7 голосов
/ 26 октября 2010

A QWidget не имеет сигнала clicked. Чтобы сделать эту работу, используйте события. Все виджеты поддерживают события, поэтому есть некоторая ручная работа, но не большая:

  1. Переопределите функцию event для вашего виджета (который вы выводите из QWidget
  2. Ответить на события типа QEvent:: MouseButtonPress

Либо добавьте метод eventFilter.

Найдите классы и методы, которые я упомянул для примеров кода, и найдите полное решение в зависимости от ваших потребностей.

...