如何在下拉状态下设置QComboBox的背景颜色?

3
我可以这样更改QComboBox的颜色:
QPalette palette = ui->selectSource->palette();
palette.setColor(QPalette::Active, QPalette::Button, Qt::white);
palette.setColor(QPalette::Inactive, QPalette::Button, Qt::white);
ui->selectSource->setPalette(palette);

它变成了白色,但是当它处于下拉状态时,它仍然有一些灰色(默认)。

如何更改这个?


1
也许可以将相同的调色板应用于组合框的下拉视图?您可以使用 QComboBox::view() 函数获取它。 - vahancho
@vahancho,成功了!好主意。 - user2440074
@vahancho,对于视图,它必须是“QPalette :: Background”。请修正您的答案。 - user2440074
2个回答

0

你还应该设置 QPalette::Base 角色。引用来自 Qt 文档关于 QPalette::Base

主要用作文本输入部件的背景颜色,但也可用于其他绘画——例如组合框下拉列表和工具栏手柄的背景。通常是白色或其他浅色。

所以你还应该有:

palette.setColor(QPalette::Base, Qt::white);

1
很奇怪,这在我的Linux和Windows上都能工作。 - Nejat
@Tay2510,这对我来说很奇怪,因为在我的代码中,“palette.setColor(QPalette::Base, Qt.white);”没有任何作用。也许我的主窗口的某些属性不同或者我漏掉了什么。 - user2440074

0

你也可以为组合框的下拉视图应用另一个调色板。要获取指向下拉视图的指针,可以使用QComboBox::view()函数。因此,你的代码将如下所示:

QPalette palette = ui->selectSource->palette();
palette.setColor(QPalette::Active, QPalette::Button, Qt::white);
palette.setColor(QPalette::Inactive, QPalette::Button, Qt::white);

QPalette view_palette = ui->selectSource->view()->palette();
view_palette.setColor(QPalette::Active, QPalette::Background, Qt::white);
ui->selectSource->view()->setPalette(view_palette);

奇怪,这段代码对我不起作用,但Nejat的代码可以。我很困惑...0rz - Tay2510
@Tay2510,我正在使用Qt v5.3.x。你呢? - user2440074
@AlekDepler 使用 Windows 7 32 位操作系统的 Qt 4.8.6。 - Tay2510

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接