c++ 如何在Windows中更改Qt QTabWidget选项卡的背景颜色?

xfb7svmp  于 2023-01-22  发布在  Windows
关注(0)|答案(1)|浏览(399)

我想改变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中弄清楚?
谢谢

iyfamqjs

iyfamqjs1#

答案是加上
QApplication a(argc, argv); a.setStyle("fusion");
到main.cpp,您将在Windows中获得与Linux计算机中相同的彩色选项卡

相关问题