通过样式表仅在QTabWidget中应用文本颜色一个特定选项卡

Apply text color one particular tab only in a QTabWidget via stylesheet

本文关键字:一个 选项 颜色 文本 样式 QTabWidget 应用文 应用      更新时间:2023-10-16

我正在尝试在QTabWidget的标签栏中设置特定选项卡的文本颜色。 此特定选项卡可能出现在任何索引中(不一定是第一个、最后一个或中间、已选择或未选择(。例如:包含 30 个选项卡的 QTabWidget 中第 17 个选项卡的文本颜色需要为绿色。 如何使用样式表(而不是使用setTabTextColor API(实现相同的目标? 在样式表中,我们可以设置所有选项卡的文本颜色,或者设置第一个、最后一个或中间选项卡的文本颜色。但是如何通过样式表设置随机选项卡的文本颜色是一个问题。

我建议给你的目标QTabWidget一个对象名称,并使用ID选择器来专门定位它。有关参考,请参阅 https://doc.qt.io/qt-5/stylesheet-syntax.html#selector-types 中有关不同 seelctor 类型的文档。

您可以使用此属性设置对象名称:https://doc.qt.io/qt-5/qobject.html#objectName-prop

  1. 来自QTabWidget的子类(仅用于覆盖其QTabBar(;
  2. QTabBar子类并覆盖paintEvent()
  3. QTabWidget子类在构造函数中设置了我们的新选项卡栏:
setTabBar(new MyTabBar(this));
  1. 然后,这里有一些QTabBar子类的示例代码:

.h 文件- 使选项卡文本透明:

explicit MyTabBar(QWidget *parent = nullptr) : QTabBar(parent)
{ 
setStyleSheet("MyTabBar::tab { color: rgba(0,0,0,0) }"); 
}

.cpp文件- 画家魔术:

void MyTabBar::paintEvent(QPaintEvent *event)
{
QTabBar::paintEvent(event);
QPainter painter(this);
for(auto i = 0; i < count(); i++)
{
painter.setPen(QColor(YOUR, RANDOM, VALUES));
painter.drawText(tabRect(i), Qt::AlignHCenter | Qt::AlignVCenter, tabText(i));
}
}