因此,我需要用户能够完全自定义标签,即右键单击每个选项卡,可以调出调色板,这将使他们可以更改单个选项卡的颜色。
要做到这一点,我像许多其他帖子所建议的那样,在QTabBar中重新实现了paintEvent函数,但是,我似乎无法获得用于实际更改颜色的选项卡...
当前,我只是遍历每个选项卡并将所有QPalette属性更改为黄色。
该标签的文本变为黄色但没有其他作用!
paintEvent的代码:
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);
答案 0 :(得分:0)
正如@eyllanesc建议的那样,我不得不使用a.setStyle(“ fusion”),其中“ a”是使用中的QApplication。
答案 1 :(得分:0)
您可以尝试: setStyleSheet( “颜色:rgb(黄色代码);” / 文本颜色 / “ background-color:rgb(颜色代码);” / bg颜色 /