QPalette在QTabBar中不起作用?

时间:2017-10-31 10:37:27

标签: c++ qt qtabbar qcolor qpalette

我的表单中有Tabbar,我想要的是将Active和Inactive选项卡与其中的不同颜色文本区分开来。我的代码如下。我不明白它里面缺少什么,它总是在所有标签中显示QPalette :: Active文本颜色

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);

2 个答案:

答案 0 :(得分:1)

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

也许您可以尝试更改样式以查看它是否会发生变化。您可以使用QApplication::setStyle()在特定小部件或应用程序范围内设置样式。

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

答案 1 :(得分:-1)

我通过使用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);