0

所以我需要用户能够完全自定义选项卡,即右键单击每个选项卡并能够调出一个调色板,这将允许他们更改单个选项卡的颜色。

为此,我像许多其他帖子所建议的那样,在 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);
4

2 回答 2

0

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

于 2018-07-17T12:48:03.677 回答
0

你可以试试:setStyleSheet("color: rgb(黄色代码);"/ text color /"background-color: rgb(color code);"/ bg color /

于 2018-07-17T20:11:21.450 回答