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