在qt界面中,响应事件的往往是界面,而界面上的控件则被屏蔽,比如想要让QLabel响应鼠标事件,之前已写到可以通过把QLabel提升为类,在类中自定义鼠标响应事件及重绘事件等事件。最近学习发现通过EventFilter过滤事件更方便且高效。
在界面类的头文件添加
public slots:
bool eventFilter(QObject *, QEvent *);
在源文件中为需要响应事件的控件安装事件过滤
ui->picLabel->installEventFilter(this); ui->picLabel->setMouseTracking(true);
然后在事件监视函数eventFilter()中监视响应事件
bool Dialog::eventFilter(QObject *watched, QEvent *event)
整体代码如下