views:

39

answers:

2

Hello,

I have my own class based in QWidget. I put this widget in QMainWindow and i need catch mouse click on this widget.

I try:

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

But nothing happening. How can i do it?

Thank you

+3  A: 

QWidget does not have a clicked() signal, and QMainWindow does not have an exit() slot. It is impossible to connect to an unexisting signal and unexisting slot. The return value of the connect must be true if the connect is successful. Check this value when you make connections to be sure that your code will work correctly.

To exit your application, you must call qApp->quit()

Also, as it has been mentioned by others, you will have to install an eventFilter or reimplement the

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

or

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

methods.

There are plenty of examples in the official doc of Qt, this for example reimplements the mousePressEvent(QMouseEvent *event) method.

For the eventFilter option, see this small example.

Hope this helps.

Live
+2  A: 

A QWidget has no clicked signal. To make this work, use events. All widgets support events, so there's some manual work to do, but not much:

  1. Override the event function for your widget (which you derive from QWidget
  2. Respond to events of type QEvent:: MouseButtonPress

Alternatively, add a eventFilter method.

Google the classes and methods I mentioned for code samples and to get to a complete solution depending on your exact needs.

Eli Bendersky