Qt改变按钮背景色问题

Qt PushButton单击的槽函数里面改变此按钮背景色,会在槽函数执行完之后才更改,有没有立刻生效的方法?

QPushButton:pressed {
    background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1,   stop:0 rgba(60, 186, 162, 255), stop:1 rgba(98, 211, 162, 255))
}
QPushButton {
     background-color: #3cbaa2; border: 1px solid black;
     border-radius: 5px;
}

QPushButton:disabled {
    background-color: rgb(170, 170, 127)
}

img

你可以在pressed槽函数里面改变颜色,pressed 先于 clicked 执行

ui界面,在属性栏找到stylesheet,点击旁边的省略号;点击【添加颜色】,选择color修改文字颜色,选择background-color修改背景色。
还可以去了解一下QSS,它是 Qt 提供的一种用来自定义控件外观的机制,就是美化样式的,和CSS很像。如果是做一个大的项目需要统一样式,QSS还是比较方便的

是的,有一种立刻生效的方法。您可以使用Qt的事件循环机制,通过在槽函数中使用QMetaObject::invokeMethod函数,来把更改背景色的操作放入事件队列中,从而实现立刻生效。
具体实现方法如下:

void MainWindow::on_pushButton_clicked()
{
    QMetaObject::invokeMethod(ui->pushButton, "setStyleSheet", Qt::QueuedConnection,
                              Q_ARG(QString, "background-color: red;"));
}

这样,在槽函数中改变按钮背景色的操作将立刻生效,而不是等到槽函数执行完之后再生效。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/772237
  • 这篇博客你也可以参考下:QT批量实现单选按钮组
  • 这篇博客也不错, 你可以看下QT批量实现单选按钮组
  • 除此之外, 这篇博客: Qt pushbutton按钮常用方法及技巧总结中的 4.按钮不同状态的切换,使用标志位 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    按钮点击过后响应槽函数,在槽函数里面好像是不可以使用if判断语句的,所以使用switch-case语句来实现多种状态的切换。在全局定义一个标志位,
    (A)只有两种状态的情况:
    注:num在声明时我定义为1,可以根据个人设置。

     switch(num)
        {
         case 1: ui->label->setNum(num);num--;ui->pushButton->setText("≧◇≦"); break;
         case 0: ui->label->setNum(num);num++;ui->pushButton->setText("^_^");break;
        }
    
    
    

    效果如下图所示,点击按钮,label中的数字进行0-1,1-0的切换,按钮的图标也随之变换。
    在这里插入图片描述

    (B)多种状态的情况:

        switch(num)
        {case 1: ui->label->setNum(num);num++;ui->pushButton->setText("≧◇≦"); break;
         case 2: ui->label->setNum(num);num++;ui->pushButton->setText("^_^");break;
         case 3: ui->label->setNum(num);num++;ui->pushButton->setText("╮( ̄▽  ̄)╭");break;
         case 4: ui->label->setNum(num);num=num-4;ui->pushButton->setText("(=^_^=)");break;
         case 0: ui->label->setNum(num);num++;ui->pushButton->setText("	(︶︿︶)");break;
        }
    }
    

    效果如下图所示,每次点击按钮,label中的数字进行0-1-2-3-4-0-1,1-0的切换一次状态,按钮的图标也随之变换。在这里插入图片描述


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^