qt事件过滤器之使label具有pushbutton的点击功能

一、事件过滤器:我目前所理解的就是让界面一直监视着这个事件去做一件事

二、实现的功能是通过点击label,让它具有按钮pushbutton的点击功能

三、首先需要在界面上部署一个label,然后就是在头文件中加上:

#include 
#include 

1、需要添加事件过滤器的声明:

public:
   bool eventFilter(QObject *target, QEvent *event);

四、在源函数中:

需要开始在构造函数中添加对这个label的注册:

 ui->label->installEventFilter(this);

然后开始在定义中写这个事件过滤器函数:

bool MainWindow::eventFilter(QObject *target, QEvent *event)
{
     if(target == ui->label && event->type() == QEvent::MouseButtonPress)
    {
        qDebug()<<"label press";
        //label里面的字体颜色变成红色
        ui->label->setStyleSheet("color:green");
    }
   return QMainWindow::eventFilter(target, event);
}

以上实现的是点击事件,产生的效果

下面是通过label事件,右击鼠标产生的效果:

bool MainWindow::eventFilter(QObject *target, QEvent *event)
{
   QMouseEvent *mouseEvent=static_cast(event);
  if(target == ui->label && mouseEvent->button()==Qt::RightButton)
    {
        qDebug()<<"label fast";
        //设置label的背景色
        setStyleSheet("QLabel{background-color:rgb(255,0,255)}");
        //设置label的字体颜色
        ui->label->setStyleSheet("color:blue");
}
 return QMainWindow::eventFilter(target, event);

}

注意:后面的    return QMainWindow::eventFilter(target, event);这句非常重要,也特别容易犯错

返回的QMainWindow是你最初开始继承的那个基类,如果是QDialog,那就改成  return QDialog::eventFilter(target, event);

注意:设置label的字体颜色的改变:

1、设置label背景色的改变:

 setStyleSheet("QLabel{background-color:rgb(255,0,255)}");

2、设置label字体颜色的更改

 ui->label->setStyleSheet("color:blue");

 

你可能感兴趣的:(QT界面布局)