QPushbutton的hover悬空状态失效

8 篇文章 1 订阅

此情况很有可能在设置了伪状态之后,又在程序执行顺序上后加了按钮的背景色样式,比如:

我们先给一个按钮加一个悬浮时的伪状态:

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(ui->btnTest,&QPushButton::clicked,this,&MainWindow::on_Test_clicked);
    ui->pushButton_3->setStyleSheet("QPushButton:hover {background-color: #3377FF;}");

}

运行后的初始状态:

 把鼠标放上去之后:

 伪状态正常显示,没什么问题;

若我们在悬浮按钮伪状态之后再给按钮设置一个背景色:ui->pushButton_3->setStyleSheet("background-color: #000000;");

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(ui->btnTest,&QPushButton::clicked,this,&MainWindow::on_Test_clicked);
    ui->pushButton_3->setStyleSheet("QPushButton:hover {background-color: #3377FF;}");
    ui->pushButton_3->setStyleSheet("background-color: #000000;");
}

新的运行结果:

将鼠标放上去的状态依旧是黑色,悬浮的伪状态丢失;

 

若我们把代码整体修改一下,即把样式写在一个setStyleSheet里,则效果都不会消失,即无悬浮的时候是黑色,有悬浮的时候是蓝色;

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(ui->btnTest,&QPushButton::clicked,this,&MainWindow::on_Test_clicked);
    ui->pushButton_3->setStyleSheet("QPushButton {background-color: #000000;}"
                                    "QPushButton:hover {background-color: #3377FF;}");

}

注意:

1.在setStyleSheet中同一个“{}”里的不同属性要用“;”隔开

ui->pushButton_3->setStyleSheet("background-color: #000000;border-radius: 4px 4px 4px 4px;");

等价于
ui->pushButton_3->setStyleSheet("QPushButton {background-color: #000000;border-radius: 4px 4px 4px 4px;};");
所以background-color与border-radius中间使用了“;”来隔开。

2.{}与{}之间不用写“;”,否则会被第一个“;”截断,下面的按钮样式:黑色圆角无悬浮色

ui->pushButton_3->setStyleSheet("QPushButton {background-color: #000000;border-radius: 4px 4px 4px 4px;};QPushButton:hover {background-color: #3377FF;}");

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值