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

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

我想改变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:
'

  1. #ifndef OZELTABWIDGET_H
  2. #define OZELTABWIDGET_H
  3. #include <QStyleOptionTab>
  4. #include <QStylePainter>
  5. #include <QTabWidget>
  6. class OzelTabBar : public QTabBar {
  7. public:
  8. OzelTabBar(const QHash<QString, QColor> &colors, QWidget *parent = 0)
  9. : QTabBar(parent) {
  10. mColors = colors;
  11. }
  12. protected:
  13. void paintEvent(QPaintEvent * /*event*/) {
  14. QStylePainter painter(this);
  15. QStyleOptionTab opt;
  16. for (int i = 0; i < count(); i++) {
  17. initStyleOption(&opt, i);
  18. if (mColors.contains(opt.text)) {
  19. opt.palette.setColor(QPalette::Button, mColors[opt.text]);
  20. }
  21. painter.drawControl(QStyle::CE_TabBarTabShape, opt);
  22. painter.drawControl(QStyle::CE_TabBarTabLabel, opt);
  23. }
  24. }
  25. private:
  26. QHash<QString, QColor> mColors;
  27. };
  28. class OzelTabWidget : public QTabWidget {
  29. public:
  30. OzelTabWidget(QWidget *parent = 0) : QTabWidget(parent) {
  31. QHash<QString, QColor> SideTab;
  32. SideTab["Main"] = QColor("yellow");
  33. SideTab["Settings"] = QColor("cornflowerblue");
  34. SideTab["Account"] = QColor("blue");
  35. SideTab["Server"] = QColor("gray");
  36. SideTab["Records"] = QColor("magenta");
  37. SideTab["Preset"] = QColor("cyan");
  38. SideTab["Test"] = QColor("red");
  39. setTabBar(new OzelTabBar(SideTab));
  40. }
  41. };
  42. #endif // OZELTABWIDGET_H

'
我得到了这个工作在Ubuntu机器,彩色标签小部件的图像是在附件中。
当我切换到Windows 10机器与相同的Qt版本,它根本不工作.
有没有人能帮我在Windows 10中弄清楚?
谢谢

iyfamqjs

iyfamqjs1#

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

相关问题