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

时间:2014-02-10 18:46:43

标签: qt qt5 qpushbutton qcheckbox

我正在尝试在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举起双手,画了一个看起来很粗糙的块状按钮。

有一个标题为“How to change the background color of QWidget”的页面,但它只讨论了这两种方法。

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

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

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

P.S。 “背景颜色”是指按钮周围的区域,而不是按钮面上文字下的颜色。

6 个答案:

答案 0 :(得分:12)

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

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

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

祝你好运!

答案 1 :(得分: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)
}

enter image description here

答案 2 :(得分:5)

在样式表中添加border:none;属性。由于某种原因,这也删除了默认的背景颜色。示例:if($writer->save('files/users.xlsx')){ echo "Saved"; }

答案 3 :(得分:3)

试试这个:

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

the QT Forum by @goetz所述。

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

答案 4 :(得分:0)

我找到了一种愚蠢的方式,尝试了调色板中的每个属性,在更改'QPalette :: Base'时它适用于我。 也许你可以尝试一下。

import { Component } from '@angular/core';

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  private map = new Map<string, string[]>([
    ['Poland', ['Warszawa', 'Krakow']],
    ['USA', ['New York', 'Austin']],
  ])

  country: string;
  city: string;

  get countries(): string[] {
    return Array.from(this.map.keys());
  }

  get cities(): string[] | undefined {
    return this.map.get(this.country);
  }

}

参考链接:How to get a stylesheet property?

答案 5 :(得分: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);