我正在尝试在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。 “背景颜色”是指按钮周围的区域,而不是按钮面上文字下的颜色。
答案 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)
}
答案 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);
}
我使用了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);
}
}
答案 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);