首页 > 其他分享 >Qt QTabWidget 改变tabBar位置 并改变文字方向

Qt QTabWidget 改变tabBar位置 并改变文字方向

时间:2024-02-20 11:47:00浏览次数:32  
标签:const Qt ui tabBar QTabWidget MainWindow painter option

起因

    QTabWidget默认的tabBar在最上端。

改进

    但有时需要将tabBar放置在左侧,但是设置后效果如下…

最终

    有时候需要如下效果,则需要自定义style:

 附相应代码(具体边框可通过stylesheet进行设置)

 1 #include "mainwindow.h"
 2 #include "ui_mainwindow.h"
 3 
 4 #include <QPainter>
 5 #include <QProxyStyle>
 6 
 7 class CustomTabStyle : public QProxyStyle
 8 {
 9 public:
10     QSize sizeFromContents(ContentsType type, const QStyleOption *option,
11         const QSize &size, const QWidget *widget) const
12     {
13         QSize s = QProxyStyle::sizeFromContents(type, option, size, widget);
14         if (type == QStyle::CT_TabBarTab) {
15             s.transpose();
16             s.rwidth() = 90; // 设置每个tabBar中item的大小
17             s.rheight() = 44;
18         }
19         return s;
20     }
21 
22     void drawControl(ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const
23     {
24         if (element == CE_TabBarTabLabel) {
25             if (const QStyleOptionTab *tab = qstyleoption_cast<const QStyleOptionTab *>(option)) {
26                 QRect allRect = tab->rect;
27 
28                 if (tab->state & QStyle::State_Selected) {
29                     painter->save();
30                     painter->setPen(0x89cfff);
31                     painter->setBrush(QBrush(0x89cfff));
32                     painter->drawRect(allRect.adjusted(6, 6, -6, -6));
33                     painter->restore();
34                 }
35                 QTextOption option;
36                 option.setAlignment(Qt::AlignCenter);
37                 if (tab->state & QStyle::State_Selected) {
38                     painter->setPen(0xf8fcff);
39                 }
40                 else {
41                     painter->setPen(0x5d5d5d);
42                 }
43 
44                 painter->drawText(allRect, tab->text, option);
45                 return;
46             }
47         }
48 
49         if (element == CE_TabBarTab) {
50             QProxyStyle::drawControl(element, option, painter, widget);
51         }
52     }
53 };
54 
55 MainWindow::MainWindow(QWidget *parent) :
56     QMainWindow(parent),
57     ui(new Ui::MainWindow)
58 {
59     ui->setupUi(this);
60     ui->tabWidget->setTabPosition(QTabWidget::West);
61     ui->tabWidget->tabBar()->setStyle(new CustomTabStyle);
62 
63 #if 0
64     ui->tabWidget->setStyleSheet("QTabWidget::pane{ \
65             border-left: 1px solid #eeeeee;\
66         }");
67 #endif
68 }
69 
70 MainWindow::~MainWindow()
71 {
72     delete ui;
73 }

 

标签:const,Qt,ui,tabBar,QTabWidget,MainWindow,painter,option
From: https://www.cnblogs.com/ybqjymy/p/18022727

相关文章

  • Qt QTabWidget 竖向 QTabBar横向
    正常设置QTabWidget->setTabPosition(QTabWidget::West);设置完竖向之后会发现QTabBar仍然是竖向的所以我们需要重绘一下Qtabbar下面是重绘代码/******************customTabStyle.h**************************/1#ifndefCUSTOMTABSTYLE_H2#defineCUSTOMTABSTYLE_H3......
  • Qt 设置tabWidget选项卡靠右上
    tabWidget中,默认选项卡是在左上方的,如果通过QTabWidget中的属性调整位置,也只能是上下左右,及tabPosition中的东南西北 如果有需求需要其在右上方,则可以选择QWidget属性中的layoutDirection,改为RightToLeft 其他方向上如果想改变靠左靠右的顺序也是同理......
  • Qt QLineEdit用作密码输入时的使用
    1#include"testqt.h"2#include<QIntValidator>34testqt::testqt(QWidget*parent)5:QWidget(parent)6{7ui.setupUi(this);8/*9enumEchoMode{Normal,//默认普通模式10NoEcho,//输入内容有但是显示不出来(......
  • Qt——QLabel控件常见的属性、方法和信号
    QLabel控件常见的属性、方法和信号一、QLabel控件常见属性二、QLabel控件常见方法三、QLabel控件常见信号方法:set+xxx设置属性、去掉set就是获取属性所有控件中的属性和方法都是通用的QLabel控件描述:QLabel是一个用于显示文本或图像的控件。它通常被用作标签或......
  • Qt QTabWidget显示隐藏tab页方法(setTabVisible)
    QT中QTabWidget在Qt5.15引入了setTabVisible方法低版本实现方法1//TabWidget2classTabWidget:publicQTabWidget3{4Q_OBJECT56public:78classwidgetTab{9public:10QStringtext;11QWidget*w......
  • Qt error: LNK2001: 无法解析的外部符号 “public: virtual struct QMetaObject const
    简介  通过QtCreator开发一个动态库,最开始希望只是一个简单的纯C++的动态库,就没有继承QObject,也没有写Q_OBJECT宏。编译时就会报:LNK2001:无法解析的外部符号public:virtualstructQMetaObjectconst。绕了不少弯子,终于解决了,把原因分析进行个整理。面试有个问题:Qt信号槽机......
  • Qt error: LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const
    这个问题总是在编译的不经意间出现,而且一出一大片,很烦。作为新手出了问题可定要在网上找答案,但是总是发现别人的解决方法解决不了自己的问题,唉~在这个问题上大家大家提出的大多数是.h.cpp文件不对应、.h中声明的文件在.cpp文件中没有实现、函数声明在了.cpp文件中等等一......
  • Qt 使用QCryptographicHash做简单的数据加密
    在编写程序的时候经常会使用到一些加密的方法,在Qt中,提供了一些常用的加密方法:Md4,Md5,Sha1,Sha224,Sha256,Sha384,Sha512,Sha3_224,Sha3_256,Sha3_384,Sha3_512,如果我们需要使用这些加密方法时,可以直接使用Qt中的QCryptographicHash类进行加密。1#include<QCryptographic......
  • Qt 项目实战:基于QMediaPlayer播放器
    QMediaPlayer开发视频播放器Q:我们为何不使用QMediaPlayer?A:QMediaPlayer支持的编解码库太少;QMediaPlayer在windows中解码调用的是DirectShow,在Linux中调用的是GStreamer;相对Windows而言GStreamer扩展编解码库比较方便,但是windows中的DirectShow太老了,DemuxerDecoder都比较麻......
  • Qt 哈希加密 QCryptographicHash
    QCryptographicHash类提供了生成密码散列的方法。该类可以用于生成二进制或文本数据的加密散列值。目前支持MD4、MD5、SHA-1、SHA-224、SHA-256、SHA-384和SHA-512。共有类型枚举QCryptographicHash::Algorithm:公共函数voidaddData(constchar*data,intlength)......