QPalette 在 QTabBar 中不起作用

QPalette Does not work in QTabBar?

本文关键字:不起作用 QTabBar QPalette      更新时间:2023-10-16

我的表单中有选项卡栏,我想要的是使用不同颜色的文本区分活动和非活动选项卡。我的代码如下。我不明白里面缺少什么,它总是在所有选项卡中显示QPalette::活动文本颜色

QPalette Palette;
QTabBar* pTabBar = tabBar();
pTabBar->setAutoFillBackground(false);
pTabBar->setDrawBase(true);
Palette.setColor(QPalette::Active, QPalette::Window,       QColor(255, 255, 255));
Palette.setColor(QPalette::Active, QPalette::WindowText,   QColor(117, 121, 124));
pTabBar->setPalette(Palette);
Palette.setColor(QPalette::Inactive, QPalette::Window,     QColor(171, 175, 178));
Palette.setColor(QPalette::Inactive, QPalette::WindowText, QColor(64,  68,  71));
pTabBar->setPalette(Palette);

QPalette 用作当前样式的输入 ( QStyle )。调色板的确切用法留给样式。某些样式可能使用设置调色板,但其他样式可能会选择完全忽略调色板。例如,GTK风格完全忽略了它。

也许您可以尝试更改样式以查看它是否更改了某些内容。您可以在特定小部件上设置样式,也可以使用 QApplication::setStyle() 在应用程序范围内设置样式。

正如@saeed所建议的,可以使用样式表。但我个人从不使用它,因为它会打破风格。

我使用 QPalette 解决此问题

QTabBar* pTabBar = new QTabBar();
QPalette p = pTabBar->palette();
p.setColor(QPalette::Window, QColor(255,255,255));
p.setColor(QPalette::Button, QColor(255,255,255));
pTabBar->setPalette(p);