Qt (C++) Установка цвета отдельных вкладок в QWidgetTab
Поэтому мне нужно, чтобы пользователь имел возможность полностью настраивать вкладки, IE должен щелкнуть правой кнопкой мыши на каждой вкладке и вызвать цветовую палитру, которая позволит им изменять цвет этой отдельной вкладки.
Чтобы сделать это, я повторно реализовал функцию paintEvent в QTabBar, как предлагали многие другие посты, однако я просто не могу заставить вкладки реально менять цвет...
В настоящее время я просто бегу по каждой вкладке и меняю все свойства 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 они все перечисления, доступные для использования еще похоже, что ни один из них не меняет цвет фона.
Любая помощь будет оценена.
Приветствия.
РЕДАКТИРОВАТЬ:
Кажется, это работает, когда я изменяю форму вкладки на треугольную, однако, опять же, я не хочу этого. Это просто ошибка в Qt?
QTabWidget Реквизит:
TabWidget* centralTab = new TabWidget();
centralTab->setTabPosition(QTabWidget::South);
centralTab->setTabShape(QTabWidget::Triangular);
centralTab->setMovable(true);
m_mainWindow->setCentralWidget(centralTab);
2 ответа
Как предложил @eyllanesc, мне пришлось использовать a.setStyle("fusion"), где 'a' - это используемое приложение QApplication.
Вы можете попробовать: setStyleSheet( "color: rgb(желтый код);" /text color/ "background-color: rgb (color code);" /bg color/