Qt5 - 将背景颜色设置为QPushButton和QCheckBox

Bet*_*ker 15 qt qcheckbox qt5 qpushbutton

我正在尝试在Qt5中更改QAbstractButton(QPushButton或QCheckBox)的背景颜色并且没有运气.

这没有任何作用:

pButton->setAutoFillBackground(true);
QPalette palette = pButton->palette();
palette.setColor(QPalette::Window, QColor(Qt::blue));
pButton->setPalette(palette);
pButton->show();
Run Code Online (Sandbox Code Playgroud)

如果我尝试更改样式表:

pButton->setStyleSheet("background-color: rgb(255,255,0);");
Run Code Online (Sandbox Code Playgroud)

然后Qt举起双手,画出一个看起来很粗糙的块状按钮.

有一个标题为" 如何更改QWidget的背景颜色 "的页面,但它只讨论了这两种方法.

还有一个页面" Qt Style Sheets Examples "暗示如果你想改变背景颜色,你必须接管绘制按钮的所有方面,这看起来有点矫枉过正.

我需要这个在Mac,Windows和Ubuntu Linux上运行,如果我必须手动绘制关于按钮的所有内容3次(每个平台一次),这真的不是一件幸福的事情.

我错过了一些明显的东西吗

ps"背景颜色"是指按钮周围的区域,而不是按钮面上文本下的颜色.

Alc*_*ete 12

我遇到了同样的问题,但终于有了这个工作.我正在使用Qt 5和Fusion颜色主题:

QPalette pal = button->palette();
pal.setColor(QPalette::Button, QColor(Qt::blue));
button->setAutoFillBackground(true);
button->setPalette(pal);
button->update();
Run Code Online (Sandbox Code Playgroud)

按照上面的确切顺序尝试这些命令,如果仍然无效,请将主题设置为Fusion,然后重试.

祝好运!

  • 如果你在按钮上setFlat(true)它会响应我的期望.但对其他人来说可能不是一个理想的结果. (4认同)

aba*_*yan 11

尝试这个:

QColor col = QColor(Qt::blue);
if(col.isValid()) {
   QString qss = QString("background-color: %1").arg(col.name());
   button->setStyleSheet(qss);
}
Run Code Online (Sandbox Code Playgroud)

正如@goetz 在 QT 论坛中提到的那样

我使用了一些不同的Qcolor colas定义,QColor col = QColor::fromRgb(144,238,144);这对我有用。


kat*_*to2 8

更改Dialog styleSheet属性对我有用,将此属性设置为:

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)
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Att*_*que 7

在样式表中添加border:none; 属性.由于某种原因,这也删除了默认的背景颜色.例:background-color: rgba(46, 204, 113, 0.4); border: none;

  • 3年后,我在Windows 8的Qt 5.8中遇到了相同的问题。即使它是一种奇怪的行为,也可以解决。 (2认同)

小智 5

我找到了一个愚蠢的方法,尝试了调色板中的每个属性,并且在更改“QPalette::Base”时它对我有用。也许你可以尝试一下。

    pButton->setAutoFillBackground(true);
    QPalette palette = pButton->palette();
    //palette.setColor(QPalette::Window, QColor(Qt.blue));
    //palette.setColor(QPalette::Foreground, QColor(Qt.blue));
    palette.setColor(QPalette::Base, QColor(Qt.blue));
    //palette.setColor(QPalette::AlternateBase, QColor(Qt.blue));
    //palette.setColor(QPalette::ToolTipBase, QColor(Qt.blue));
    //palette.setColor(QPalette::ToolTipText, QColor(Qt.blue));
    //palette.setColor(QPalette::Text, QColor(Qt.blue));
    //palette.setColor(QPalette::Button, QColor(Qt.blue));
    //palette.setColor(QPalette::ButtonText, QColor(Qt.blue));
    //palette.setColor(QPalette::BrightText, QColor(Qt.blue));
    pButton->setPalette(palette);
    pButton->show();
Run Code Online (Sandbox Code Playgroud)

参考链接:如何获取样式表属性?