当前位置:   article > 正文

QTabWidet设置不同Position,tabBar文字均水平显示_tabwidget.setlayoutdirection(qt::lefttoright);

tabwidget.setlayoutdirection(qt::lefttoright);

设置QTabWidget在不同方向上的文字均水平显示。有两种方法,如下:

1、设置不同Position,tabBar文字均水平显示

QTabWidget设置在设置Position为East或者West时,文字方向默认会从下到上显示。先通过以下方法实现tabBar更改方向,但文字始终垂直显示。

方法1:通过继承QTabWidget来实现

用到函数:

void setTabButton(int index,ButtonPosition position,QWidget *widget);//给tabBar添加控件

QWidget *tabButton(int index,ButtonPosition) const;                             //获取tab上添加的控件

 

tabWidget头文件

  1. #ifndef TABWIDGET_H
  2. #define TABWIDGET_H
  3. #include<QTableWidget>
  4. #include<QLabel>
  5. class tabWidget : public QTabWidget
  6. {
  7. Q_OBJECT
  8. public:
  9. explicit tabWidget(QWidget *parent = nullptr);
  10. void updateselect(); //用来设置一开始选中的状态
  11. int addTab(QWidget *widget, const QString &); //重载(不是虚函数)
  12. signals:
  13. public slots:
  14. void slotSetLabelColor(int color); //自定义槽(响应tabBar点击事件)
  15. };
  16. #endif // TABWIDGET_H

tabWidget cpp文件

  1. #include "tabwidget.h"
  2. tabWidget::tabWidget(QWidget *parent) : QTabWidget(parent)
  3. {
  4. connect(this,SIGNAL(tabBarClicked(int)),this,SLOT(slotSetLabelColor(int)));
  5. }
  6. void tabWidget::slotSetLabelColor(int index)
  7. {
  8. for(int i=0;i<this->count();i++)
  9. {
  10. this->tabBar()->tabButton(i,QTabBar::ButtonPosition::RightSide)->setStyleSheet("background-color:rgba(0,0,0,0);");
  11. }
  12. this->tabBar()->tabButton(index,QTabBar::ButtonPosition::RightSide)->setStyleSheet("background-color:rgba(0,0,0,0);color:white;");
  13. }
  14. int tabWidget::addTab(QWidget *widget, const QString &label)
  15. {
  16. int nRetrun=QTabWidget::addTab(widget,"");
  17. int count=this->count()-1;
  18. QLabel *labelTab=new QLabel(label,this);
  19. QFont ft;
  20. ft.setPointSize(20);
  21. labelTab->setFont(ft);
  22. labelTab->setAlignment(Qt::AlignCenter);
  23. this->tabBar()->setTabButton(count,QTabBar::ButtonPosition::RightSide,labelTab);
  24. this->tabBar()->tabButton(count,QTabBar::ButtonPosition::RightSide)->setFixedHeight(64);
  25. updateselect();
  26. return nRetrun;
  27. }
  28. void tabWidget::updateselect()
  29. {
  30. for(int i=0;i<this->currentIndex();i++)
  31. {
  32. this->tabBar()->tabButton(i,QTabBar::ButtonPosition::RightSide)->setStyleSheet("background-color:rgba(0,0,0,0);color:black;");
  33. }
  34. this->tabBar()->tabButton(this->currentIndex(),QTabBar::ButtonPosition::RightSide)->setStyleSheet("background-color:rgba(0,0,0,0);color:white;");
  35. }

mainWindow  cpp

  1. #pragma execution_character_set("utf-8")
  2. #include "mainwindow.h"
  3. #include "ui_mainwindow.h"
  4. #include"tabwidget.h"
  5. MainWindow::MainWindow(QWidget *parent) :
  6. QMainWindow(parent),
  7. ui(new Ui::MainWindow)
  8. {
  9. ui->setupUi(this);
  10. tabWidget *m_tab=new tabWidget(this);
  11. QWidget *b1=new QWidget();
  12. QWidget *b2=new QWidget();
  13. m_tab->setGeometry(0,0,500,400);
  14. m_tab->setStyleSheet("QTabBar::tab{min-width:140px;max-width:140px;min-height:64px;max-height:64px;padding:0;}"
  15. "QTabBar::tab:selected{background:#025bc7}");
  16. //设置tabwidget位置 更改位置
  17. m_tab->setTabPosition(QTabWidget::TabPosition::South);
  18. if((m_tab->tabPosition()==QTabWidget::TabPosition::South)||
  19. (m_tab->tabPosition()==QTabWidget::TabPosition::North))
  20. m_tab->setLayoutDirection(Qt::LeftToRight);//LeftToRight
  21. else//东西方向的layoutDirection
  22. {
  23. m_tab->setLayoutDirection(Qt::RightToLeft);//RightToLeft
  24. }
  25. m_tab->addTab(b1,"one");
  26. m_tab->addTab(b2,"two");
  27. }
  28. MainWindow::~MainWindow()
  29. {
  30. delete ui;
  31. }

参考博客:https://blog.csdn.net/skyztttt/article/details/52448992 

方法2: 重绘代码

  1. #ifndef CUSTOMTABSTYLE_H
  2. #define CUSTOMTABSTYLE_H
  3. #include <QPainter>
  4. #include <QProxyStyle>
  5. #include <QStyleOptionTab>
  6. #include <QRect>
  7. #include <QSize>
  8. class CustomTabStyle : public QProxyStyle
  9. {
  10. public:
  11. QSize sizeFromContents(ContentsType type, const QStyleOption *option,
  12. const QSize &size, const QWidget *widget) const
  13. {
  14. QSize s = QProxyStyle::sizeFromContents(type, option, size, widget);
  15. if (type == QStyle::CT_TabBarTab) {
  16. s.transpose();
  17. s.rwidth() = 150; // 设置每个tabBar中item的大小
  18. s.rheight() = 50;
  19. }
  20. return s;
  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. allRect.setWidth(allRect.width() - 5);
  28. allRect.setHeight(allRect.height() - 2);
  29. //选中状态
  30. if (tab->state & QStyle::State_Selected) {
  31. //save用以保护坐标,restore用来退出状态
  32. painter->save();
  33. painter->setBrush(QBrush(0x004ea1));
  34. //矩形
  35. //painter->drawRect(allRect.adjusted(0, 0, 0, 0));
  36. //带有弧线矩形
  37. painter->drawRoundedRect(tab->rect, 8, 8);
  38. painter->restore();
  39. }
  40. //hover状态
  41. else if(tab->state & QStyle::State_MouseOver){
  42. painter->save();
  43. painter->setBrush(QBrush(0x004ea1));
  44. painter->drawRoundedRect(allRect, 8, 8);
  45. painter->restore();
  46. }
  47. else{
  48. painter->save();
  49. painter->setBrush(QBrush(0x78aadc));
  50. painter->drawRoundedRect(allRect, 8, 8);
  51. painter->restore();
  52. }
  53. QTextOption option;
  54. option.setAlignment(Qt::AlignCenter);
  55. painter->setFont(QFont("楷体", 18, QFont::Bold));
  56. painter->setPen(0xffffff);
  57. painter->drawText(allRect, tab->text, option);
  58. return;
  59. }
  60. }
  61. if (element == CE_TabBarTab) {
  62. QProxyStyle::drawControl(element, option, painter, widget);
  63. }
  64. }
  65. };
tab->tabBar()->setStyle(new CustomTabStyle);//注意,设置上述代码风格 就可以实现QTabBar横向

此方法更适合已经存在的QTabWidget编辑好tab里面的内容。

注意:

1.如果east和west时候,显示不完,出现...,需要设置elidemode为ElideNone。

2.不能通过样式表设置QTabBar::tab的样式。

参考博客:https://blog.csdn.net/wojiaoanchao/article/details/78911891 

 3.分享一套代码,如下图:

代码链接:https://download.csdn.net/download/weixin_41882459/12774054

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/861872
推荐阅读
相关标签
  

闽ICP备14008679号