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

laoyang1018 2013-08-07 04:14:55

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


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


#include <QtGui>

class CustomTabStyle : public QProxyStyle
{
public:
QSize 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.rwidth()=70;
s.rheight()=70;
}
return s;
}

void drawControl(ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const
{
if (element == CE_TabBarTabLabel)
{
if (const QStyleOptionTab *tab = qstyleoption_cast<const QStyleOptionTab *>(option))
{
QStyleOptionTab opt(*tab);
//opt.shape = QTabBar::RoundedNorth;
opt.text = tr("Hello");
//QIcon icon(":/Resources/icon2.ico");
//opt.icon = icon;
opt.palette.setCurrentColorGroup(QPalette::Disabled);
opt.state |= QStyle::State_Sunken;
QProxyStyle::drawControl(element, &opt, painter, widget);


return;
}
}
if (element == CE_TabBarTab)
{
painter->drawText(5,8,"1123");
//painter->setBackground(QBrush(Qt::red, Qt::SolidPattern));

}

QProxyStyle::drawControl(element, option, painter, widget);
}
};


然后再给需要设置的QTabWidget控件应用上面的样式:
ui.myTabWidget->setStyle(new CustomTabStyle);


3.就是不要用QTabWidget了,用 QStackedWidget 和 button 组合代替,此方法应该可行。
不过如果上面1,2方法可以解决的话,我就不打算用方法3尝试了。
先谢谢各位帮忙了。
...全文
10474 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdhgood 2015-09-17
  • 打赏
  • 举报
回复
不好意思,我在这个帖子里找到答案了,还是谢谢楼主的帖子
sdhgood 2015-09-17
  • 打赏
  • 举报
回复
请问如何将QT QTabWidget设置为垂直方向的?
_轻舞菲洋 2015-08-17
  • 打赏
  • 举报
回复
引用 5 楼 qq_21458195 的回复:
第二种方法怎么实现不了?可以说一下嘛
第二种方法可以实现的,我已经试过了,就是强制转换那里会报错,自己修改一下就好了,好像是const那里的问题。 另外就是,如果使用这种子类化的QStyle,qt designer里面的qss就不起做了。因为我看别的文章有说的,qss和自定义QStyle有冲突。
木子李1220 2015-07-27
  • 打赏
  • 举报
回复
第二种方法怎么实现不了?可以说一下嘛
  • 打赏
  • 举报
回复
一、Tab出现的位置 tabWidget.setTabPosition(QTabWidget.South); enum QTabWidget::TabPosition This enum type defines where QTabWidget draws the tab row: Constant Value Description QTabWidget::North 0 The tabs are drawn above the pages. QTabWidget::South 1 The tabs are drawn below the pages. QTabWidget::West 2 The tabs are drawn to the left of the pages. QTabWidget::East 3 The tabs are drawn to the right of the pages.
sno_guo 2013-11-19
  • 打赏
  • 举报
回复
楼主, 你的这个问题解决了吗,我想问下你的tabwidget是如何实现上线显示tab的,谢谢. 不好意思啊, 打扰一下,呵呵.
xiuxianshen 2013-08-08
  • 打赏
  • 举报
回复
背景色的应该可以设置背景画刷,在重绘的时候应该没问题的
laoyang1018 2013-08-08
  • 打赏
  • 举报
回复
求大神们 多多支持啊。。

16,787

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧