Qt(C ++)设置QWidgetTab中各个选项卡的颜色

时间:2018-07-17 09:16:21

标签: c++ qt qtabwidget qtabbar qpalette

因此,我需要用户能够完全自定义标签,即右键单击每个选项卡,可以调出调色板,这将使他们可以更改单个选项卡的颜色。

要做到这一点,我像许多其他帖子所建议的那样,在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);

2 个答案:

答案 0 :(得分:0)

正如@eyllanesc建议的那样,我不得不使用a.setStyle(“ fusion”),其中“ a”是使用中的QApplication。

答案 1 :(得分:0)

您可以尝试: setStyleSheet(   “颜色:rgb(黄色代码);” / 文本颜色 /   “ background-color:rgb(颜色代码);” / bg颜色 /