【发布时间】:2011-04-30 19:25:15
【问题描述】:
我有自己的基于 QWidget 的课程。我把这个小部件放在 QMainWindow 中,我需要抓住鼠标点击这个小部件。
我试过了:
connect(my_widget, SIGNAL(clicked()), this, SLOT(exit(0)));
但是什么都没有发生。我该怎么做?
【问题讨论】:
标签: c++ qt signals-slots
我有自己的基于 QWidget 的课程。我把这个小部件放在 QMainWindow 中,我需要抓住鼠标点击这个小部件。
我试过了:
connect(my_widget, SIGNAL(clicked()), this, SLOT(exit(0)));
但是什么都没有发生。我该怎么做?
【问题讨论】:
标签: c++ qt signals-slots
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 选项,请参阅this 小示例。
希望这会有所帮助。
【讨论】:
QWidget 没有 clicked 信号。要完成这项工作,请使用事件。所有的小部件都支持事件,所以有一些手动工作要做,但不多:
event 函数(从QWidget 派生
QEvent:: MouseButtonPress 类型的事件
或者,添加一个eventFilter 方法。
谷歌我提到的代码示例的类和方法,并根据您的确切需求获得完整的解决方案。
【讨论】: