在Qt中更改QPushButton样式的问题

时间:2017-09-19 15:25:14

标签: c++ qt

我在Qt中创建了一个QPushButton而没有应用任何样式,所以它继承了Windows10的样式,结果如下:

Windows Style

然后我想暂时更改按钮的颜色,所以我使用了:

pushButton->setStyleSheet("background-color: rgb(255,220,220)")

得到这个结果:

Red Style

这个结果已经不能满足我了,因为风格与原来的风格略有不同。无论如何,下一步是按钮必须返回到"正常"按下时的样式,所以我添加了这个命令

pushButton->setStyleSheet("background-color: rgb(240,240,240)")

但结果与开始按钮不同:

enter image description here

请您给我一些建议,以便更好地管理风格?

由于

2 个答案:

答案 0 :(得分:1)

实际上当您将background-color单独设置为QPushButton时,除非您为边框设置了一些值,否则背景可能不会显示。

在这里查看(Stylable Widgets列表:QPushButton) http://doc.qt.io/qt-5/stylesheet-reference.html

我认为在Windows 10中出于某种原因,你甚至可以看到没有设置边框的东西。

但推荐的方法是设置一些边界值。

因此,请尝试如下所述设置边框值,并查看它是否符合您的要求:

pushButton->setStyleSheet("background-color: rgb(255,220,220);border: none; ")

在上述链接中,您可以找到以下信息:

警告:如果您只在QPushButton上设置背景颜色,除非您将border属性设置为某个值,否则背景可能不会出现。这是因为,默认情况下,QPushButton绘制一个与背景颜色完全重叠的原生边框。

答案 1 :(得分:0)

以下是一些您可能会发现非常相似和有用的片段。

我有一个更新按钮,我将其变为红色取消按钮。更新操作完成或按下取消后,我恢复了原始颜色和文本。

// Global variables to save off button state
QPalette update_btn_palette_restore;
QString update_btn_text_restore;

...

// Update button is pressed. 
// Save the palette and text.
update_btn_palette_restore = _ui->update_button->palette ();
update_btn_text_restore = _ui->update_button->text ();

// Change the color palette and text
QPalette p=palette();
p.setBrush(QPalette::Button,Qt::red);
_ui->update_button->setPalette(p);
_ui->update_button->setText ("Cancel");

...

// Handler for when either cancel is pressed or update has finished
if(! update_btn_text_restore.isEmpty ()) {
    _ui->update_button->setText (update_btn_text_restore);
    _ui->update_button->setPalette(update_btn_palette_restore);
}