QTabWidget简例/简介及各种问题

简例:

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");

/***************************************************************************************************************/

QTabWidget实现双击关闭tab标签:

设置属性: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


你可能感兴趣的:(Qt,Qt开发)