QT:QTabWidget设置tabPosition为West时,文字向上

打印 上一主题 下一主题

主题 1034|帖子 1034|积分 3102

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x

  • 解决办法1(无效)
  1. tabWidget->setStyleSheet("QTabBar::tab { min-width: 100px; } QTabBar::tab:down { spacing: 2px; } QTabBar::tab:down { transform: rotate(270deg); }");
复制代码


  • 解决办法2(无效)
写QTabBar。
  1. painter.translate(c);
  2.       painter.rotate(90);//西方向
  3.       painter.translate(-c);
复制代码
简单分析了代码,按理来说,应该是有用的。测试结果证实是无效的。


  • 解决办法3(有用)
头文件
  1. #include <QObject>
  2. #include <QProxyStyle>
  3. //自定义tabbar的样式
  4. class WyTabStyle : public QProxyStyle
  5. {
  6.     Q_OBJECT
  7. public:
  8.     WyTabStyle();
  9.     QSize sizeFromContents(ContentsType type, const QStyleOption *option, const QSize &size, const QWidget *widget) const;
  10.     void drawControl(ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const;
  11. };
复制代码
实现。详细效果要自己调整一下。
  1. #include <QStylePainter>
  2. #include <QStyleOptionTab>
  3. #include <QTabWidget>
  4. #include "WyTabBar.h"
  5. WyTabStyle::WyTabStyle()
  6. {
  7. }
  8. QSize WyTabStyle::sizeFromContents(ContentsType type, const QStyleOption *option, const QSize &size, const QWidget *widget) const
  9. {
  10.     QSize s=QProxyStyle::sizeFromContents(type,option,size,widget);
  11.     if(type==QStyle::CT_TabBarTab){
  12.         s.transposed();
  13.         s.rwidth()=100;
  14.         s.rheight()=50;
  15.     }
  16.     return s;
  17. }
  18. void WyTabStyle::drawControl(ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const
  19. {
  20.     if(element==CE_TabBarTabLabel){
  21.         if(const QStyleOptionTab *tab=qstyleoption_cast<const QStyleOptionTab *>(option)){
  22.             QRect allRect=tab->rect;
  23.             if(tab->state&QStyle::State_Selected){
  24.                 painter->save();
  25.                 painter->setPen(0x89cfff);
  26.                 painter->setBrush(QBrush(0x89cfff));
  27.                 painter->drawRect(allRect.adjusted(6,6,-6,-6));
  28.                 painter->restore();
  29.             }
  30.             QTextOption option;
  31.             option.setAlignment(Qt::AlignCenter);
  32.             if(tab->state&QStyle::State_Selected){
  33.                 painter->setPen(0xf8fcff);
  34.             }else{
  35.                 painter->setPen(0x000001);
  36.             }
  37.             painter->drawText(allRect,tab->text,option);
  38.             return ;
  39.         }
  40.     }
  41.     if(element==CE_TabBarTab){
  42.         QProxyStyle::drawControl(element,option,painter,widget);
  43.     }
  44. }
复制代码


  • 调用
  1. this->tabBar()->setStyle(new WyTabStyle());
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

商道如狼道

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表