QTabWidget中tab页文本水平或垂直设置

QTabWidget中tab页文本水平或垂直设置

2023年7月16日发(作者:)

QTabWidget中tab页⽂本⽔平或垂直设置else // m_orientation == Qt::Horizontal{ ose();//(tab页标签在WEST⽅向,并且⽂字⽔平横向排列时使⽤) () += 10; t() += 50; // 此处⾼度变⾼了⼀点}效果图核⼼代码void TabBarStyle::drawControl(QStyle::ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget /*= nullptr*/) const{// <1> 此处element类型为:CE_TabBarTab,CE_TabBarTabShape,CE_TabBarTabLabel; // <2> 当element == CE_TabBarTabLabel时,QProxyStyle::drawControl函数会调⽤drawItemText函数, // <3> 由于drawItemText函数内得到的rect,并没有此处得到的controlRect容易理解 // <4> 所以我们要重新实现drawItemText函数,并让该函数体为空,即不要让drawItemText函数绘制⽂本 // <5> ⽽将绘制⽂本⼯作放在此处进⾏处理

// 步骤⼀:调⽤⽗类的绘制控件函数 QProxyStyle::drawControl(element, option, painter, widget);

// 步骤⼆:重新绘制tab标签页⽂本 if (element == CE_TabBarTabLabel) { if (const QStyleOptionTab *tab = qstyleoption_cast(option)) { QRect controlRect = tab->rect;

QString tabText; if (m_orientation == Qt::Vertical) { // 将⽂本字符串换⾏处理 for (int i = 0; i < tab->(); i++) { (tab->(i)); ('n'); } if (() > 1) if (() > 1) tabText = (0, () - 1); } else tabText = tab->text;

// ⽂本居中对齐 QTextOption option; gnment(Qt::AlignCenter); QPen pen = painter->pen(); or(tab->(QPalette::WindowText)); // ⽂本颜⾊ painter->setPen(pen); painter->drawText(controlRect, tabText, option); } }}void TabBarStyle::drawItemText(QPainter *painter, const QRect &rect, int flags, const QPalette &pal, bool enabled, const QString &text, QPalette::ColorRole textRole /*= QPalette::NoRole*/) const{ // 重写虚函数,但是函数体内什么都不⽤写,原因如下: // <1> 因为drawControl函数中得到的controlRect是整个tab标签页的⼤⼩(tab标签页指某⼀个选项卡页⾯,不是指整个tabBar) // <2> ⽽此处rect得到的不知道是什么⼤⼩ // <3> 所以索性就在drawControl函数中绘制⽂本了(在drawControl函数中我们已经将字符串做换⾏处理并重新绘制⽂本了)}QSize TabBarStyle::sizeFromContents(QStyle::ContentsType type, const QStyleOption *option, const QSize &contentsSize, const QWidget *widget /*= nullptr*/) const{ QSize size = contentsSize; if (type == CT_TabBarTab) { if (m_orientation == Qt::Vertical) { () += 10; t() += 20; } else // m_orientation == Qt::Horizontal { ose();//(tab页标签在WEST⽅向,并且⽂字⽔平横向排列时使⽤) () += 10; t() += 50; } } return size;}测试代码ui->tabWidget_2->tabBar()->setStyle(new TabBarStyle());ui->tabWidget_3->tabBar()->setStyle(new TabBarStyle());ui->tabWidget_4->tabBar()->setStyle(new TabBarStyle(Qt::Horizontal));ui->tabWidget_5->tabBar()->setStyle(new TabBarStyle(Qt::Horizontal));

发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1689448767a249913.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信