我想改变QTabWidget标签的背景颜色。我在代码中将QTabBar和QTabWidget子类化,然后将QTabWidget提升到这个新类。它在我的Ubuntu 18.04机器上使用Qt 6.2.2和Qt Creator 6.0.1工作。
我使用了这里提到的方法:Qt TabWidget Each tab Title Background Color
我的自定义选项卡小部件派生自QTabWidget和QTabbar:
'
#ifndef OZELTABWIDGET_H
#define OZELTABWIDGET_H
#include <QStyleOptionTab>
#include <QStylePainter>
#include <QTabWidget>
class OzelTabBar : public QTabBar {
public:
OzelTabBar(const QHash<QString, QColor> &colors, QWidget *parent = 0)
: QTabBar(parent) {
mColors = colors;
}
protected:
void paintEvent(QPaintEvent * /*event*/) {
QStylePainter painter(this);
QStyleOptionTab opt;
for (int i = 0; i < count(); i++) {
initStyleOption(&opt, i);
if (mColors.contains(opt.text)) {
opt.palette.setColor(QPalette::Button, mColors[opt.text]);
}
painter.drawControl(QStyle::CE_TabBarTabShape, opt);
painter.drawControl(QStyle::CE_TabBarTabLabel, opt);
}
}
private:
QHash<QString, QColor> mColors;
};
class OzelTabWidget : public QTabWidget {
public:
OzelTabWidget(QWidget *parent = 0) : QTabWidget(parent) {
QHash<QString, QColor> SideTab;
SideTab["Main"] = QColor("yellow");
SideTab["Settings"] = QColor("cornflowerblue");
SideTab["Account"] = QColor("blue");
SideTab["Server"] = QColor("gray");
SideTab["Records"] = QColor("magenta");
SideTab["Preset"] = QColor("cyan");
SideTab["Test"] = QColor("red");
setTabBar(new OzelTabBar(SideTab));
}
};
#endif // OZELTABWIDGET_H
'
我得到了这个工作在Ubuntu机器,彩色标签小部件的图像是在附件中。
当我切换到Windows 10机器与相同的Qt版本,它根本不工作.
有没有人能帮我在Windows 10中弄清楚?
谢谢
1条答案
按热度按时间iyfamqjs1#
答案是加上
QApplication a(argc, argv); a.setStyle("fusion");
到main.cpp,您将在Windows中获得与Linux计算机中相同的彩色选项卡