QTabWidget 如何把标签页放在左侧
資深大佬 : neighbads 5
搜索了几个代码实现,显示效果都不是很理想。
- windows 4k Height (30)
可以看到 背景上有个不知道什么字符
- windows 4k Height (35)
背景上的字符变小
- mac 4k Height (35)
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
完整工程连接: https://cowtransfer.com/s/5add1fda5fe44b
大佬有話說 (0)