23

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

这什么都不做:

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

如果我尝试更改样式表:

pButton->setStyleSheet("background-color: rgb(255,255,0);");

然后 Qt 举起双手,画了一个看起来像块状的按钮。

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

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

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

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

ps “背景颜色”是指按钮周围的区域,而不是按钮表面文字下方的颜色。

4

6 回答 6

23

我有同样的问题,但最终得到了这个工作。我正在使用带有 Fusion 颜色主题的 Qt 5:

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

按照上面的确切顺序尝试这些命令,如果仍然不起作用,请将您的主题设置为 Fusion 并重试。

祝你好运!

于 2014-04-29T16:16:15.207 回答
12

尝试这个:

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

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

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

于 2018-02-01T03:59:08.813 回答
12

border:none;向样式表添加属性

由于某种原因,这也会删除默认背景颜色。

例子:background-color: rgba(46, 204, 113, 0.4); border: none;

于 2015-08-17T14:23:25.210 回答
11

更改 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)
}

在此处输入图像描述

于 2016-03-28T16:42:02.740 回答
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();

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

于 2018-04-11T09:32:13.603 回答
0

我一直在努力解决同样的问题。您需要选择QPalette::Button而不是QPalette::Window. Qt 参考是这样说的: QPaletteButton - 通用按钮背景颜色。此背景可能与 Window 不同,因为某些样式需要按钮的不同背景颜色。所以我这样解决了:

        QPalette pal=this->palette(); \\"this" is my derived button class
        pal.setColor(QPalette::Window, style.background);
        QColor col=style.background; \\ my style wrapper, returns QColor
        this->setAutoFillBackground(true);
        this->setPalette(pal);
于 2020-07-08T14:17:02.570 回答