简例:
tabWidget = new QTabWidget();
//新建第一个页面的部件
QWidget *widget = new QWidget();
QLineEdit *lineEdit = new QLineEdit();
QPushButton *pushButton = new QPushButton("Test");
QVBoxLayout *vLayout = new QVBoxLayout();
vLayout->addWidget(lineEdit);
vLayout->addWidget(pushButton);
widget->setLayout(vLayout);
//新建第二个页面的部件
QLabel *label = new QLabel("Hello Qt");
//新建第三个页面的部件
QPushButton *pushButton3 = new QPushButton("Click Me");
//向QTabWidget中添加第一个页面
QIcon icon1(":/new/icon/images/1.ico");
tabWidget->addTab(widget, icon1, "Tab1");
//向QTabWidget中添加第二个页面
QIcon icon2(":/new/icon/images/2.ico");
tabWidget->addTab(label, icon2, "Tab2");
//向QTabWidget中添加第三个页面
QIcon icon3(":/new/icon/images/3.ico");
tabWidget->addTab(pushButton3, icon3, "Tab3");
QHBoxLayout *layout = new QHBoxLayout();
layout->addWidget(tabWidget);
this->setLayout(layout);
this->resize(300, 100);
this->setWindowTitle("QTabWidgetDemo");
/***************************************************************************************************************/
设置属性:setTabsClosable ( bool closeable )
涉及到的信号:void QTabWidget::tabCloseRequested ( int index ) [signal]
/***************************************************************************************************************/
(此处摘自http://blog.csdn.net/notton/article/details/5996730)
当设置tabbar居左时, 直接用QTabWidget存在的几个问题:
1。文字不是水平显示
2。TabBar的内容显示与StackWidget显示冲突
3。调整单个TabBar的高度
4。单个TabBar的press event响应
5. 文字图片位置显示关系
分析原因:
1。QTabWidget::setUpLayout控制Table与stackwidget的关系, 但setUpLayout是private, 解决方法,就是把它重新实现,跟踪代码,发现在QTabWidget::initStyleOption中调整。
2。文字竖直显示要改成水平显示,需要重新实现tabbar::paintevent, 继承QTabtab, 仿效paintevent简单写一个,问题5与它类似
3。问题3,由于它的信息都存在QTabBarPrivate中,把Rect的top, height按显示顺序调整即可。
问题4与它类似,重新实现mousePressEvent即可.
/***************************************************************************************************************/
设置tab不同样式:
setStyleSheet("QTabWidget::pane{border-width:1px;border-color:rgb(48, 104, 151);\
border-style: outset;background-color: rgb(132, 171, 208);\
background: transparent;} \
QTabWidget::tab-bar{border-width:0px;}\
QTabBar::tab{border-bottom-color: #C2C7CB;\
border-top-left-radius: 0px;\
border-top-right-radius: 0px;\
max-width: 75px; min-width:75px; min-height:25px;\
font:14px Times New Roman;\
padding: 0px;\
}\
QTabBar::scroller {\
width:25;\
border:0;\
padding: 0px;\
}\
QTabBar QToolButton::right-arrow {\
background-color:rgb(132, 171, 208);\
border-width: 0;\
background-image: url(:/images/tab/rightbtn.png);\
}\
QTabBar QToolButton::right-arrow:hover {\
background-color:rgb(132, 171, 208);\
border-width: 0;\
background-image: url(:/images/tab/hoverrightbtn.png);\
}\
QTabBar QToolButton::right-arrow:disabled {\
background-color:rgb(132, 171, 208);\
border-width: 0;\
background-image: url(:/images/tab/grayrightbtn.png);\
}\
QTabBar QToolButton::left-arrow {\
background-color:rgb(132, 171, 208);\
border-width: 0;\
background-image: url(:/images/tab/leftbtn.png);\
}\
QTabBar QToolButton::left-arrow:hover {\
background-color:rgb(132, 171, 208);\
border-width: 0;\
background-image: url(:/images/tab/hoverleftbtn.png);\
}\
QTabBar QToolButton::left-arrow:disabled {\
background-color:rgb(132, 171, 208);\
border-width: 0;\
background-image: url(:/images/tab/grayleftbtn.png);\
}\
QTabBar::tab:first:selected {\
margin-left: 30; margin-right: 0;\
color: white;\
border-image: url(:/images/tab/sel3.png);\
}\
QTabBar::tab:first:!selected {\
color: black;\
margin-left: 30; margin-right: 0;\
border-image: url(:/images/tab/normal3.png);\
}\
QTabBar::tab:first:hover:!selected {\
color: black;\
margin-left: 30; margin-right: 0;\
border-image: url(:/images/tab/hover3.png);\
}\
QTabBar::tab:middle:selected {\
margin-top: 0; margin-left: -15; margin-right: 8;\
color: white;\
border-image: url(:/images/tab/sel3.png);\
}\
QTabBar::tab:middle:!selected {\
color: black;\
margin-top: 0; margin-left: -15; margin-right: 8;\
border-image: url(:/images/tab/normal3.png);\
}\
QTabBar::tab:middle:hover:!selected {\
color: black;\
margin-top: 0; margin-left: -15; margin-right: 8;\
border-image: url(:/images/tab/hover3.png);\
}\
QTabBar::tab:last:selected {\
margin-top: 0px; margin-left: 0; margin-right: 0;\
color: white;\
border-image: url();\
}\
QTabBar::tab:last:!selected {\
color: black;\
margin-top: 0; margin-left: 0; margin-right: 0;\
border-image: url();\
}\
QTabBar::tab:last:hover:!selected {\
color: black;\
margin-top: 0; margin-left: 0; margin-right: 0;\
border-image: url();\
}\
QTabBar::tab:only-one {\
margin: 0;\
}");
tab标签的长度,也需要重载QTabBar来动态计算
/***************************************************************************************************************/
QTabWidget简介:
QTabWidget类提供了一堆选项卡式窗口部件。
一个选项卡部件提供了一个标签栏(见QTabBar)和一个“页面区”,用于显示与每个选项卡页面。默认情况下,标签栏显示在页面区上方,但是可以使用配置改变这种默认方式(见TabPosition)。每个选项卡都是关联到一个不同的窗口小部件(页面)。只有当前页显示在页面区域;所有其他页面都是隐藏的。用户可以显示不同的页面通过点击它的选项卡或按其Alt +字母快捷如果它有一个。用户可以使用Tab键来选择不同的页面,或者如果选项卡有快捷键也可以使用快捷键(Alt + 字母)来选择。
enum QTabWidget::TabPosition
This enum type defines where QTabWidget draws the tab row:
Constant ValueDescription
QTabWidget::North 0The tabs are drawn above the pages.
QTabWidget::South 1The tabs are drawn below the pages.
QTabWidget::West 2The tabs are drawn to the left of the pages.
QTabWidget::East 3The tabs are drawn to the right of the pages.
enum QTabWidget::TabShape
This enum type defines the shape of the tabs:
Constant ValueDescription
QTabWidget::Rounded 0The tabs are drawn with a rounded look. This is the default shape.
QTabWidget::Triangular 1The tabs are drawn with a triangular look.
正常使用QTabWidget 的方法是按如下步骤:
1、创建一个QTabWidget对象。
2、为选项卡对象中为每个页面创建QWidget对象(页面对象)。注意为QWidget对象指定父对象指针。
3、把子部件插入到页面部件中去,并使用布局管理器管理这些部件。
4、调用addTab()或者insertTab()把页面对象放置到选项卡对象中去,给每个标签设置合适的标签名和一个可选的键盘快捷方式。
标签的位置被TabPosition属性定义,标签的形状被TabShape定义。
当用户选择一个页面时,currentChanged()信号就被发射。
我们可以使用currentIndex()和currentWidget()分别来获取当前页面的索引和当前的窗口部件。为了获取某个页面的指针,我们可以通过widget()函数来获取,此外,我们还可以通过indexOf()函数来获取当前位置的下一个位置的页面的指针。我们可以使用setCurrentIndex setCurrentWidget()或()来显示一个指定的页面。
我们可以使用setTabText()或者setTabIcon()来改变标签文本和图标。可以使用removeTab()来删除某个选项卡及其相关的页面。
在任何给定的时间,每个选项卡都是要么启用或者禁用(见setTabEnabled())。如果启用一个标签,那么该标签的文字是以正常显示的,用户可以选择该选项卡。如果标签被禁用,那么该标签的文字是另一种方式显示来提醒用户不能选择该选项卡。值得注意的是,即使一个选项卡被禁用,该选项卡对应的页面仍然是可见的,例如所有的标签碰巧都被禁用。
对于复杂的对话框,选项卡对话框提供了一个非常好的分解方法;另外一种方法是使用QStackedWidget,这个类提供了在一些页面之间导航的方法。例如:一个QToolBar或QListWidget就提供了这种功能。
QTabWidget的大部分功能是由QTabBar(在最顶端,提供标签)和QStackedWidget(大部分区域,组成一个独立的页面)提供的。
/***************************************************************************************************************/
Properties
count : const int
currentIndex : int
documentMode : bool
elideMode : Qt::TextElideMode
iconSize : QSize
movable : bool
tabPosition : TabPosition
tabShape : TabShape
tabsClosable : bool
usesScrollButtons : bool
59 properties inherited from QWidget
1 property inherited from QObject
Public Functions
QTabWidget(QWidget * parent = 0)
~QTabWidget()
int addTab(QWidget * page, const QString & label)
int addTab(QWidget * page, const QIcon & icon, const QString & label)
void clear()
QWidget * cornerWidget(Qt::Corner corner = Qt::TopRightCorner) const
int count() const
int currentIndex() const
QWidget * currentWidget() const
bool documentMode() const
Qt::TextElideMode elideMode() const
QSize iconSize() const
int indexOf(QWidget * w) const
int insertTab(int index, QWidget * page, const QString & label)
int insertTab(int index, QWidget * page, const QIcon & icon, const QString & label)
bool isMovable() const
bool isTabEnabled(int index) const
void removeTab(int index)
void setCornerWidget(QWidget * widget, Qt::Corner corner = Qt::TopRightCorner)
void setDocumentMode(bool set)
void setElideMode(Qt::TextElideMode)
void setIconSize(const QSize & size)
void setMovable(bool movable)
void setTabEnabled(int index, bool enable)
void setTabIcon(int index, const QIcon & icon)
void setTabPosition(TabPosition)
void setTabShape(TabShape s)
void setTabText(int index, const QString & label)
void setTabToolTip(int index, const QString & tip)
void setTabWhatsThis(int index, const QString & text)
void setTabsClosable(bool closeable)
void setUsesScrollButtons(bool useButtons)
QTabBar * tabBar() const
QIcon tabIcon(int index) const
TabPosition tabPosition() const
TabShape tabShape() const
QString tabText(int index) const
QString tabToolTip(int index) const
QString tabWhatsThis(int index) const
bool tabsClosable() const
bool usesScrollButtons() const
QWidget * widget(int index) const
Public Slots
void setCurrentIndex(int index)
void setCurrentWidget(QWidget * widget)
19 public slots inherited from QWidget
1 public slot inherited from QObject
Signals
void currentChanged(int index)
void tabBarClicked(int index)
void tabBarDoubleClicked(int index)
void tabCloseRequested(int index)
4 signals inherited from QWidget
2 signals inherited from QObject