管理器Widgets(07):【类】QTabWidget [官翻]

QTabWidget Class

QTabWidget类提供了一个具有栈的选项卡式的小部件。
QTabWidget既是基本Widget,也是管理器Widget类。

Header#include < QTabWidget >
qmakeQT += widgets
InheritsQWidget
Inherited By

详细说明

img

选项卡小部件提供一个选项卡栏(参见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绘制选项卡行的位置:

ConstantValueDescription
QTabWidget::North0选项卡绘制在页面上方。
QTabWidget::South1选项卡绘制在页面下方。
QTabWidget::West2选项卡绘制在页面的左侧。
QTabWidget::East3选项卡绘制在页面的右侧。

enum TabShape

此枚举类型定义选项卡的形状:

ConstantValueDescription
QTabWidget::Rounded0制表符以圆形外观绘制。这是默认形状。
QTabWidget::Triangular1标签是用三角形绘制的。

属性

  1. count: const int 选项卡栏中的选项卡数
    默认情况下,此属性包含值0。

    Access functions:

    • int count() const
  2. currentIndex: int 当前选项卡页的索引位置

    Access functions:

    • int currentIndex() const
    • void setCurrentIndex(int index)
  3. documentMode: bool 选项卡小部件是否以适合文档页面的模式呈现。这与macOS上的文档模式相同
    设置此属性时,不会呈现选项卡小部件框架。此模式对于显示文档类型页面非常有用,其中页面覆盖了选项卡小部件的大部分区域。

    Access functions:

    • bool documentMode() const
    • void setDocumentMode(bool set)

  4. elideMode: Qt::TextElideMode 如何省略选项卡栏中的文本

    Access functions:

    • Qt::TextElideMode elideMode() const
    • void setElideMode(Qt::TextElideMode mode)
  5. iconSize: QSize 选项卡栏中图标的最大大小

    Access functions:

    • QSize iconSize() const
    • void setIconSize(const QSize &size)
  6. movable: bool 用户是否可以在选项卡栏区域内移动选项卡

    默认情况下,此属性为false;

    • bool isMovable() const
    • void setMovable(bool movable)
  7. tabBarAutoHide: bool 如果为true,则当选项卡栏包含少于2个选项卡时,它将自动隐藏

    默认情况下,此属性为false。

    Access functions:

    • bool tabBarAutoHide() const
    • void setTabBarAutoHide(bool enabled)
  8. tabPosition: TabPosition 选项卡在此选项卡小部件中的位置
    此属性的可能值由TabPosition enum描述。
    默认情况下,此特性设置为“北”。

    Access functions:

    • QTabWidget::TabPosition tabPosition() const
    • void setTabPosition(QTabWidget::TabPosition position)

  9. tabShape: TabShape 选项卡小部件中选项卡的形状
    此属性的可能值为QTabWidget::Rounded(默认值)或QTabWidget::Triangal。

    Access functions:

    • QTabWidget::TabShape tabShape() const
    • void setTabShape(QTabWidget::TabShape s)

  10. tabsClosable: bool 是否将关闭按钮自动添加到每个选项卡

    Access functions:

    • bool tabsClosable() const
    • void setTabsClosable(bool closeable)
  11. usesScrollButtons: bool 当选项卡栏有许多选项卡时,此属性决定是否应使用按钮滚动选项卡

    当选项卡栏中的选项卡太多而无法容纳其大小时,选项卡栏可以选择扩展其大小,也可以添加允许您在选项卡间滚动的按钮。默认情况下,该值取决于样式。

    Access functions:

    • bool usesScrollButtons() const
    • void setUsesScrollButtons(bool useButtons)

公共函数

构造和析构

  1. QTabWidget(QWidget *parent = nullptr)
  2. virtual ~QTabWidget()

属性相关

  1. int count() const
  2. int currentIndex() const
  3. void setCurrentIndex(int index)
  4. bool documentMode() const
  5. void setDocumentMode(bool set)
  6. Qt::TextElideMode elideMode() const
  7. void setElideMode(Qt::TextElideMode mode)
  8. QSize iconSize() const
  9. void setIconSize(const QSize &size)
  10. bool isMovable() const
  11. void setMovable(bool movable)
  12. bool tabBarAutoHide() const
  13. void setTabBarAutoHide(bool enabled)
  14. QTabWidget::TabPosition tabPosition() const
  15. void setTabPosition(QTabWidget::TabPosition position)
  16. QTabWidget::TabShape tabShape() const
  17. void setTabShape(QTabWidget::TabShape s)
  18. bool tabsClosable() const
  19. void setTabsClosable(bool closeable)
  20. bool usesScrollButtons() const
  21. void setUsesScrollButtons(bool useButtons)

修改

增删选项

  1. int addTab(QWidget *page, const QString &label)
  2. int addTab(QWidget *page, const QIcon &icon, const QString &label)
  3. int insertTab(int index, QWidget *page, const QString &label)
  4. int insertTab(int index, QWidget *page, const QIcon &icon, const QString &label)
  5. void clear()
  6. void removeTab(int index)

选项栏和内容控件

  1. QTabBar * tabBar() const
  2. QWidget * widget(int index) const
  3. int indexOf(QWidget *w) const
  4. QWidget * cornerWidget(Qt::Corner corner = Qt::TopRightCorner) const
  5. void setCornerWidget(QWidget *widget, Qt::Corner corner = Qt::TopRightCorner)
  6. QWidget * currentWidget() const

选项修改

  1. bool isTabEnabled(int index) const
  2. void setTabEnabled(int index, bool enable)
  3. bool isTabVisible(int index) const
  4. void setTabVisible(int index, bool visible)
  5. QIcon tabIcon(int index) const
  6. void setTabIcon(int index, const QIcon &icon)
  7. QString tabText(int index) const
  8. void setTabText(int index, const QString &label)
  9. QString tabToolTip(int index) const
  10. void setTabToolTip(int index, const QString &tip)
  11. QString tabWhatsThis(int index) const
  12. void setTabWhatsThis(int index, const QString &text)

重写的公共函数

  1. virtual bool hasHeightForWidth() const override
  2. virtual int heightForWidth(int width) const override
  3. virtual QSize minimumSizeHint() const override
  4. virtual QSize sizeHint() const override

公共槽

  1. void setCurrentIndex(int index)
  2. void setCurrentWidget(QWidget *widget)

信号

  1. void currentChanged(int index)
  2. void tabBarClicked(int index)
  3. void tabBarDoubleClicked(int index)
  4. void tabCloseRequested(int index)

受保护的函数

  1. void initStyleOption(QStyleOptionTabWidgetFrame *option) const
  2. void setTabBar(QTabBar *tb)
  3. virtual void tabInserted(int index)
  4. virtual void tabRemoved(int index)

重写的受保护的函数

  1. virtual void changeEvent(QEvent *ev) override
  2. virtual bool event(QEvent *ev) override
  3. virtual void keyPressEvent(QKeyEvent *e) override
  4. virtual void paintEvent(QPaintEvent *event) override
  5. virtual void resizeEvent(QResizeEvent *e) override
  6. 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值