2010-10-26 102 views
18

我有我自己的基于QWidget的类。我把这个小部件放在QMainWindow中,我需要用鼠标点击这个小部件。qt QWidget点击

我想:

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

但什么也没有发生。我该怎么做?

回答

26

QWidget没有clicked()信号,而QMainWindow没有exit()插槽。无法连接到未知信号和未知插槽。如果连接成功,则连接的返回值必须为true。在进行连接时检查此值以确保代码正常工作。

要退出你的应用程序,你必须调用qApp->quit()

此外,因为它已被其他人所说,你将不得不安装一个eventFilter或重新实现

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

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

方法。

在Qt的官方文档中有很多例子,例如this重写了mousePressEvent(QMouseEvent *event)方法。

对于eventFilter选项,请参阅this小示例。

希望这会有所帮助。

5

A QWidget没有clicked信号。要做到这一点,请使用事件。所有部件支持的事件,所以有一些手工工作要做,但数量不多:

  1. 覆盖的event功能,为您的小部件(你获得从QWidget
  2. 响应类型的事件QEvent:: MouseButtonPress

或者,添加一个eventFilter方法

谷歌我提到的代码示例中的类和方法,并得到一个完整的解决方案,根据您的确切需要DS。