搜索了几个代码实现,显示效果都不是很理想。
可以看到 背景上有个不知道什么字符
背景上的字符变小
MAC 里简直不能看
代码,网上搜到的基本都是这样修改的:
qtabwidgetex.cpp
#include "qtabwidgetex.h"
QTabBarStyle::QTabBarStyle(QStyle *parent) : QProxyStyle(parent)
{
}
void QTabBarStyle::drawControl(ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = nullptr) const
{
if(element == CE_TabBarTabLabel)
{
const QStyleOptionTab *tab = qstyleoption_cast<const QStyleOptionTab *>(option);
if(tab)
{
QStyleOptionTab opt(*tab);
opt.shape = QTabBar::RoundedNorth;
//opt.icon = QIcon(":/res/11.ico");
//opt.text = "Hello";
//opt.palette.setCurrentColorGroup(QPalette::Disabled);
//opt.state |= QStyle::State_Sunken;
QProxyStyle::drawControl(element, &opt, painter, widget);
}
}
QProxyStyle::drawControl(element, option, painter, widget);
}
QSize QTabBarStyle::sizeFromContents(ContentsType type, const QStyleOption *option, const QSize &size, const QWidget *widget) const
{
QSize s = QProxyStyle::sizeFromContents(type, option, size, widget);
if(type == QStyle::CT_TabBarTab)
{
s.transpose();
s.setWidth(120);
s.setHeight(35);
}
return s;
}
QTabWidgetEx::QTabWidgetEx(QWidget *parent) : QTabWidget(parent)
{
m_tabbar = new QTabBar(this);
m_tabbar->setMovable(false);
m_tabbar->setStyle(new QTabBarStyle());
this->setTabBar(m_tabbar);
this->setTabPosition(QTabWidget::West);
}
QTabWidgetEx::~QTabWidgetEx()
{
}
qtabwidgetex.h
#ifndef QTABWIDGETEX_H
#define QTABWIDGETEX_H
#include <QWidget>
#include <QTabWidget>
#include <QTableWidgetItem>
#include <QTabBar>
#include <QProxyStyle>
#include <QPainter>
class QTabBarStyle : public QProxyStyle
{
Q_OBJECT
public:
explicit QTabBarStyle(QStyle *style = nullptr);
void drawControl(ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const override;
QSize sizeFromContents(ContentsType type, const QStyleOption *option, const QSize &size, const QWidget *widget) const override;
};
class QTabWidgetEx : public QTabWidget
{
Q_OBJECT
public:
explicit QTabWidgetEx(QWidget *parent = nullptr);
~QTabWidgetEx();
signals:
public slots:
private:
QTabBar *m_tabbar;
};
#endif // QTABWIDGETEX_H
1
neighbads OP 少了个 return;
```c++ void QTabBarStyle::drawControl(ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = nullptr) const { if(element == CE_TabBarTabLabel) { const QStyleOptionTab *tab = qstyleoption_cast<const QStyleOptionTab *>(option); if(tab) { QStyleOptionTab opt(*tab); opt.shape = QTabBar::RoundedNorth; //opt.icon = QIcon(":/res/11.ico"); //opt.text = "Hello"; //opt.palette.setCurrentColorGroup(QPalette::Disabled); //opt.state |= QStyle::State_Sunken; QProxyStyle::drawControl(element, &opt, painter, widget); return; } } QProxyStyle::drawControl(element, option, painter, widget); } ``` |