文章目录
QTabWidget Class
QTabWidget类提供了一个具有栈的选项卡式的小部件。
QTabWidget既是基本Widget,也是管理器Widget类。
Header | #include < QTabWidget > |
---|---|
qmake | QT += widgets |
Inherits | QWidget |
Inherited By |
详细说明
选项卡小部件提供一个选项卡栏(参见QTabBar)和一个“页面区域”,用于显示与每个选项卡相关的页面。默认情况下,选项卡栏显示在页面区域的上方,但是可以使用不同的配置(请参见TabPosition)。每个选项卡都与不同的小部件(称为页面)相关联。页面区域中只显示当前页面;其他所有页面都隐藏。用户可以通过单击其选项卡或按Alt+字母快捷键(如果有)来显示不同的页面。
使用QTabWidget的正常方法是执行以下操作:
- 创建一个QTabWidget。
- 为选项卡对话框中的每个页面创建一个QWidget,但不要为它们指定父窗口小部件。
- 将子窗口小部件插入页面窗口小部件,使用布局将其定位为正常位置。
- 调用addTab() 或insertTab() 将页面小部件放入选项卡小部件,为每个选项卡提供一个带有可选键盘快捷键的合适标签。
选项卡的位置由tabPosition定义,其形状由tabShape定义。
当用户选择页面时,会发出currentChanged() 信号。
当前页索引可用作currentIndex() ,即带有currentWidget() 的当前页小部件。可以使用widget() 检索指向具有给定索引的页面小部件的指针,并可以使用indexOf() 查找小部件的索引位置。使用setCurrentWidget() 或setCurrentIndex() 显示特定页面。
可以使用setTabText() 或setTabIcon() 更改选项卡的文本和图标。可以使用removeTab() 删除选项卡及其关联页。
每个选项卡在任何给定时间都处于启用或禁用状态(请参见setTabEnabled() )。如果启用了选项卡,则会正常绘制选项卡文本,用户可以选择该选项卡。如果禁用该选项,则以不同的方式绘制选项卡,用户无法选择该选项卡。请注意,即使某个选项卡被禁用,该页仍然可以显示,例如,如果所有选项卡都被禁用。
选项卡小部件是分割复杂对话框的一种非常好的方法。另一种方法是使用QStackedWidget,为其提供一些在页面之间导航的方法,例如QToolBar或QListWidget。
QTabWidget中的大部分功能由 QTabBar(在顶部,提供选项卡)和 QStackedWidget(大部分区域,组织各个页面)提供。
公共类型
enum TabPosition
此枚举类型定义QTabWidget绘制选项卡行的位置:
Constant | Value | Description |
---|---|---|
QTabWidget::North | 0 | 选项卡绘制在页面上方。 |
QTabWidget::South | 1 | 选项卡绘制在页面下方。 |
QTabWidget::West | 2 | 选项卡绘制在页面的左侧。 |
QTabWidget::East | 3 | 选项卡绘制在页面的右侧。 |
enum TabShape
此枚举类型定义选项卡的形状:
Constant | Value | Description |
---|---|---|
QTabWidget::Rounded | 0 | 制表符以圆形外观绘制。这是默认形状。 |
QTabWidget::Triangular | 1 | 标签是用三角形绘制的。 |
属性
-
count: const int 选项卡栏中的选项卡数
默认情况下,此属性包含值0。Access functions:
- int count() const
-
currentIndex: int 当前选项卡页的索引位置
Access functions:
- int currentIndex() const
- void setCurrentIndex(int index)
-
documentMode: bool 选项卡小部件是否以适合文档页面的模式呈现。这与macOS上的文档模式相同
设置此属性时,不会呈现选项卡小部件框架。此模式对于显示文档类型页面非常有用,其中页面覆盖了选项卡小部件的大部分区域。Access functions:
- bool documentMode() const
- void setDocumentMode(bool set)
-
elideMode: Qt::TextElideMode 如何省略选项卡栏中的文本
Access functions:
- Qt::TextElideMode elideMode() const
- void setElideMode(Qt::TextElideMode mode)
-
iconSize: QSize 选项卡栏中图标的最大大小
Access functions:
- QSize iconSize() const
- void setIconSize(const QSize &size)
-
movable: bool 用户是否可以在选项卡栏区域内移动选项卡
默认情况下,此属性为false;
- bool isMovable() const
- void setMovable(bool movable)
-
tabBarAutoHide: bool 如果为true,则当选项卡栏包含少于2个选项卡时,它将自动隐藏
默认情况下,此属性为false。
Access functions:
- bool tabBarAutoHide() const
- void setTabBarAutoHide(bool enabled)
-
tabPosition: TabPosition 选项卡在此选项卡小部件中的位置
此属性的可能值由TabPosition enum描述。
默认情况下,此特性设置为“北”。Access functions:
- QTabWidget::TabPosition tabPosition() const
- void setTabPosition(QTabWidget::TabPosition position)
-
tabShape: TabShape 选项卡小部件中选项卡的形状
此属性的可能值为QTabWidget::Rounded(默认值)或QTabWidget::Triangal。Access functions:
- QTabWidget::TabShape tabShape() const
- void setTabShape(QTabWidget::TabShape s)
-
tabsClosable: bool 是否将关闭按钮自动添加到每个选项卡
Access functions:
- bool tabsClosable() const
- void setTabsClosable(bool closeable)
-
usesScrollButtons: bool 当选项卡栏有许多选项卡时,此属性决定是否应使用按钮滚动选项卡
当选项卡栏中的选项卡太多而无法容纳其大小时,选项卡栏可以选择扩展其大小,也可以添加允许您在选项卡间滚动的按钮。默认情况下,该值取决于样式。
Access functions:
- bool usesScrollButtons() const
- void setUsesScrollButtons(bool useButtons)
公共函数
构造和析构
- QTabWidget(QWidget *parent = nullptr)
- virtual ~QTabWidget()
属性相关
- int count() const
- int currentIndex() const
- void setCurrentIndex(int index)
- bool documentMode() const
- void setDocumentMode(bool set)
- Qt::TextElideMode elideMode() const
- void setElideMode(Qt::TextElideMode mode)
- QSize iconSize() const
- void setIconSize(const QSize &size)
- bool isMovable() const
- void setMovable(bool movable)
- bool tabBarAutoHide() const
- void setTabBarAutoHide(bool enabled)
- QTabWidget::TabPosition tabPosition() const
- void setTabPosition(QTabWidget::TabPosition position)
- QTabWidget::TabShape tabShape() const
- void setTabShape(QTabWidget::TabShape s)
- bool tabsClosable() const
- void setTabsClosable(bool closeable)
- bool usesScrollButtons() const
- void setUsesScrollButtons(bool useButtons)
修改
增删选项
- int addTab(QWidget *page, const QString &label)
- int addTab(QWidget *page, const QIcon &icon, const QString &label)
- int insertTab(int index, QWidget *page, const QString &label)
- int insertTab(int index, QWidget *page, const QIcon &icon, const QString &label)
- void clear()
- void removeTab(int index)
选项栏和内容控件
- QTabBar * tabBar() const
- QWidget * widget(int index) const
- int indexOf(QWidget *w) const
- QWidget * cornerWidget(Qt::Corner corner = Qt::TopRightCorner) const
- void setCornerWidget(QWidget *widget, Qt::Corner corner = Qt::TopRightCorner)
- QWidget * currentWidget() const
选项修改
- bool isTabEnabled(int index) const
- void setTabEnabled(int index, bool enable)
- bool isTabVisible(int index) const
- void setTabVisible(int index, bool visible)
- QIcon tabIcon(int index) const
- void setTabIcon(int index, const QIcon &icon)
- QString tabText(int index) const
- void setTabText(int index, const QString &label)
- QString tabToolTip(int index) const
- void setTabToolTip(int index, const QString &tip)
- QString tabWhatsThis(int index) const
- void setTabWhatsThis(int index, const QString &text)
重写的公共函数
- virtual bool hasHeightForWidth() const override
- virtual int heightForWidth(int width) const override
- virtual QSize minimumSizeHint() const override
- virtual QSize sizeHint() const override
公共槽
- void setCurrentIndex(int index)
- void setCurrentWidget(QWidget *widget)
信号
- void currentChanged(int index)
- void tabBarClicked(int index)
- void tabBarDoubleClicked(int index)
- void tabCloseRequested(int index)
受保护的函数
- void initStyleOption(QStyleOptionTabWidgetFrame *option) const
- void setTabBar(QTabBar *tb)
- virtual void tabInserted(int index)
- virtual void tabRemoved(int index)
重写的受保护的函数
- virtual void changeEvent(QEvent *ev) override
- virtual bool event(QEvent *ev) override
- virtual void keyPressEvent(QKeyEvent *e) override
- virtual void paintEvent(QPaintEvent *event) override
- virtual void resizeEvent(QResizeEvent *e) override
- virtual void showEvent(QShowEvent *) override
演示代码
#include <QtWidgets>
#define WidgetType QTabWidget
int i=0,j=0;
QList<WidgetType *> widgetList;
QList<QLabel *> labelList;
QCommonStyle cs;
void addFrame(QGridLayout *mainLayout,QWidget *parent){
WidgetType *widget = new WidgetType(parent);
widgetList.append (widget);
QLabel *label = new QLabel(parent);
labelList.append (label);
auto *frame = new QFrame(parent);
frame->setFrameStyle (QFrame::Panel | QFrame::Plain);
auto *vBox = new QVBoxLayout(frame);
vBox->addWidget (label,Qt::AlignCenter);
vBox->addWidget (widget,Qt::AlignCenter);
vBox->setStretch (0,0);
vBox->setStretch (1,1);
mainLayout->addWidget (frame,i,j);
j++;
}
void setLabelText(int i,QString text){
if(i >= labelList.count ()){
return;
}
QLabel *label = labelList.at (i);
label->setText (text);
}
WidgetType* getWidget(int i){
if(i >= widgetList.count ()){
qDebug() << __LINE__ <<"行 getWidget(int i) 函数 变量"<< i << "超出范围";
i = 0; // 超出范围默认使用 0
}
return widgetList.at (i);
}
int main(int argc, char *argv[])
{
// QApplication::setStyle (QStyleFactory::create ("fusion")); //windowsvista macintosh fusion
QApplication app(argc,argv);
QMetaObject mo = WidgetType::staticMetaObject;
app.setApplicationName (mo.className ());
QDialog w;
w.setWindowFlag (Qt::WindowContextHelpButtonHint,false);
auto *mainLayout = new QGridLayout(&w);
addFrame (mainLayout,&w);
addFrame (mainLayout,&w);
getWidget (0)->addTab (new QLabel("Label 0"),"Tab0");
getWidget (0)->addTab (new QLabel("Label 1"),"Tab1");
getWidget (0)->addTab (new QLabel("Label 2"),"Tab2");
getWidget (0)->setTabsClosable (true);
setLabelText (0,"setTabsClosable (true)");
getWidget (1)->addTab (new QLabel("Label 0"),"Tab0");
getWidget (1)->addTab (new QLabel("Label 1"),"Tab1");
getWidget (1)->addTab (new QLabel("Label 2"),"Tab2");
getWidget (1)->setTabsClosable (false);
setLabelText (1,"setTabsClosable (false)");
w.resize (400,200);
w.show ();
app.exec();
return 0;
}
参考
- Tab Dialog Example