Qt 之按钮鼠标 悬浮、按下、松开后的效果

简介

  • 本文介绍了Qt中的按钮实现响应鼠标悬浮、按下、松开后的效果,在三种状态下,按钮改变不同的背景图片。

  • 方式1:通过修改样式表的方式去实现;

  • 方式2:通过继承QPushButton去实现一个自定义的按钮;

  • 方式3:在主界面中给按钮安装事件过滤器的方式去实现

方式1:通过修改样式表的方式去实现

  • 这里尽量不要有中文注释,我这里注释后就达不到想要的效果
  • 这个是修改myBtn父类的样式表
// 默认显示的图片
QPushButton#myBtn
{
    border-image:url(:/fly1.png);
}
// 进入显示的图片
QPushButton#myBtn:hover
{
    border-image:url(:/fly2.png);
}
// 按下显示图片
QPushButton#myBtn:pressed
{
    border-image:url(:/fly3.png);
}

方式2:通过继承QPushButton去实现一个自定义的按钮;

继承QPushButton类后,重写了event()方法

bool MyPushButton::event(QEvent *event)
{
    switch (event->type())
    {
    case QEvent::Enter:
        this->setIcon(QIcon(":/icons/images/c.png"));
        break;
    case QEvent::Leave:
        this->setIcon(QIcon(":/icons/images/c1.png"));
        break;
    case QEvent::MouseButtonPress:
        this->setIcon(QIcon(":/icons/images/暂停.png"));
        break;
    case QEvent::MouseButtonRelease:
        this->setIcon(QIcon(":/icons/images/c1.png"));
        break;
    default:
        break;
    }
    return QPushButton::event(event);
}

方式3:在主界面中给按钮安装事件过滤器的方式去实现

  • 注意这里先要给控件注册事件处理器
  • 重写事件过滤器
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

     // 给控件注册事件过滤器
    ui->myBtn->installEventFilter(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
    switch (event->type()) {
    case QEvent::HoverEnter:
        if(obj == ui->myBtn)
            ui->myBtn->setIcon(QIcon(":/fly1.png")); // 按钮进入
        break;
    case QEvent::HoverLeave:
        if(obj == ui->myBtn)
            ui->myBtn->setIcon(QIcon(":/fly2.png")); // 按钮离开,恢复默认
        break;
    case QEvent::MouseButtonPress:
        if(obj == ui->myBtn)
            ui->myBtn->setIcon(QIcon(":/fly3.png")); // 按钮按下
        break;
    case QEvent::MouseButtonRelease:
        if(obj == ui->myBtn)
            ui->myBtn->setIcon(QIcon(":/fly4.png")); // 按钮松开
        break;
    default:
        break;
    }
    return QWidget::eventFilter(obj, event);
}

在这里插入图片描述

总结

  • 三种方式都能实现一个按钮在悬浮、按下、松开后显示不同的背景图片的效果。
  • 其中第一种方式实现起来最为简单,如果仅仅是按钮外观的切换,采用该方法最为合理,符合MVC设计理念;
  • 第二种方法和第三种方式更具有灵活性,但难度也相对较大,这两种方法常用来实现一些更特殊的按钮操作。
  • 8
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值