所以我需要用户能够完全自定义选项卡,即右键单击每个选项卡并能够调出一个调色板,这将允许他们更改单个选项卡的颜色。
为此,我像许多其他帖子所建议的那样,在 QTabBar 中重新实现了paintEvent 函数,但是,我似乎无法让标签实际改变颜色......
目前我只是浏览每个选项卡并将所有 QPalette 属性更改为黄色。
选项卡的文本变为黄色,但没有其他内容!
油漆事件代码:
protected:
void paintEvent(QPaintEvent *e) {
QStylePainter painter(this);
QStyleOptionTab opt;
for (int i = 0; i < count(); i++)
{
initStyleOption(&opt, i);
opt.palette.setColor(QPalette::Button, QColor("yellow"));
opt.palette.setColor(QPalette::Base, QColor("yellow"));
opt.palette.setColor(QPalette::Window, QColor("yellow"));
opt.palette.setColor(QPalette::AlternateBase, QColor("yellow"));
opt.palette.setColor(QPalette::BrightText, QColor("yellow"));
opt.palette.setColor(QPalette::ButtonText, QColor("yellow"));
opt.palette.setColor(QPalette::Highlight, QColor("yellow"));
opt.palette.setColor(QPalette::Text, QColor("yellow"));
opt.palette.setColor(QPalette::WindowText, QColor("yellow"));
opt.palette.setColor(QPalette::Background, QColor("yellow"));
opt.palette.setColor(QPalette::Foreground, QColor("yellow"));
opt.palette.setColor(QPalette::ToolTipBase, QColor("yellow"));
opt.palette.setColor(QPalette::ToolTipText, QColor("yellow"));
painter.drawControl(QStyle::CE_TabBarTabShape, opt);
painter.drawControl(QStyle::CE_TabBarTabLabel, opt);
}
}
正如我所说,文本变为黄色但背景没有,根据http://doc.qt.io/archives/qt-4.8/qpalette.html#ColorRole-enum它们是所有可用的枚举尚未使用他们似乎都没有改变背景颜色。
任何帮助将不胜感激。
干杯。
编辑:
当我将标签形状更改为三角形时,它似乎可以工作,但是我又不想这样。这只是Qt中的一个错误吗?
QTabWidget 道具:
TabWidget* centralTab = new TabWidget();
centralTab->setTabPosition(QTabWidget::South);
centralTab->setTabShape(QTabWidget::Triangular);
centralTab->setMovable(true);
m_mainWindow->setCentralWidget(centralTab);