找回密码
 立即注册
收起左侧

求助:QT QTabWidget设置为垂直方向时 文本如何设置为水平方向

1
回复
10929
查看
[复制链接]
累计签到:1 天
连续签到:1 天
来源: 2013-8-8 10:14:34 显示全部楼层 |阅读模式
5Qter豆

这个垂直的tabWidge如何 给文字方向弄水平了呢
通过网上搜集资料,目前了解有以下3种解决方案:
1.通过自定义派生一个QTabwidget类,然后在自定义myQTabWidget类中对于文字等 进行重绘。
   不过本人为新手菜鸟,对重绘文本这块不是很懂,还请大侠指点。


2.对于QT原生的QTabwidget类进行QProxyStyle风格设置,具体看以下的代码,
  该方法能够实现文字方向水平了,可是给之前通过QSS设置的背景颜色等冲掉了,现在无法设置背景,不知道如何在此基础上重新设置背景,还请了解的大侠指点迷津。
  1. #include <QtGui>

  2. class CustomTabStyle : public QProxyStyle
  3. {
  4. public:
  5.         QSize sizeFromContents(ContentsType type, const QStyleOption *option,
  6.                 const QSize &size, const QWidget *widget) const
  7.         {
  8.                 QSize s = QProxyStyle::sizeFromContents(type, option, size, widget);
  9.                 if (type == QStyle::CT_TabBarTab)
  10.                 {        s.transpose();
  11.                 s.rwidth()=70;
  12.                 s.rheight()=70;
  13.                 }
  14.                 return s;
  15.         }

  16.         void drawControl(ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const
  17.         {
  18.                 if (element == CE_TabBarTabLabel)
  19.                 {
  20.                         if (const QStyleOptionTab *tab = qstyleoption_cast<const QStyleOptionTab *>(option))
  21.                         {
  22.                                 QStyleOptionTab opt(*tab);
  23.                                 //opt.shape = QTabBar::RoundedNorth;
  24.                                 opt.text = tr("Hello");
  25.                                 //QIcon icon(":/Resources/icon2.ico");
  26.                                 //opt.icon = icon;
  27.                                         opt.palette.setCurrentColorGroup(QPalette::Disabled);
  28.                                  opt.state |= QStyle::State_Sunken;
  29.                                 QProxyStyle::drawControl(element, &opt, painter, widget);


  30.                                 return;
  31.                         }
  32.                 }
  33.                 if (element == CE_TabBarTab)
  34.                 {
  35.                         painter->drawText(5,8,"1123");
  36.                         //painter->setBackground(QBrush(Qt::red, Qt::SolidPattern));

  37.                 }

  38.                 QProxyStyle::drawControl(element, option, painter, widget);
  39.         }
  40. };
复制代码
然后再给需要设置的QTabWidget控件应用上面的样式:



ui.myTabWidget->setStyle(new CustomTabStyle);





3.就是不要用QTabWidget了,用 QStackedWidget 和 button 组合代替,此方法应该可行。
不过如果上面1,2方法可以解决的话,我就不打算用方法3尝试了。
先谢谢各位帮忙了。

最佳答案

查看完整内容

Most of the functionality in QTabWidget is provided by a QTabBar (at the top, providing the tabs) and a QStackedWidget (most of the area, organizing the individual pages). 其实QTabWidget的就是用QTabBar和QStackedWidget实现的,所以最简单的方法就是自己做一个自定义的QTabWidget。
回复

使用道具 举报

累计签到:1569 天
连续签到:1 天
2013-8-8 10:14:35 显示全部楼层
Most of the functionality in QTabWidget is provided by a QTabBar (at the top, providing the tabs) and a QStackedWidget (most of the area, organizing the individual pages).

其实QTabWidget的就是用QTabBar和QStackedWidget实现的,所以最简单的方法就是自己做一个自定义的QTabWidget。
回复

使用道具 举报

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

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了