QT基础之堆栈窗体QStackedWidget类


更多参见
QT基础与实例应用目录

QStackedWidget类简介

QStackedWidget类提供了一堆部件,一次只能看到其中一个部件。QStackedWidget 可用于创建类似于QTabWidget 提供的用户界面。它是一个构建在 QStackedLayout类之上的便捷布局部件。

QStackedLayout 一样,QStackedWidget 可以构造并填充多个子部件(“页面”)。

	QLabel *firstOageWidget = new QLabel(tr("firstOageWidget")); // 可以是其他 widget
    QLabel *secondPageWidget =  new QLabel(tr("secondPageWidget"));
    QLabel *thirdPageWidget =  new QLabel(tr("thirdPageWidget"));
    QStackedWidget *stackedWidget = new QStackedWidget(this);
    stackedWidget->addWidget(firstOageWidget);
    stackedWidget->addWidget(secondPageWidget);
    stackedWidget->addWidget(thirdPageWidget);
    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(stackedWidget);
    setLayout(layout);

QStackedWidget 没有为用户提供切换页面的内在方法。 这通常通过存储 QStackedWidget 页面标题的 QComboBoxQListWidget 来完成。

	QComboBox *pageComboBox = new QComboBox();
    pageComboBox->addItem(tr("Page 1"));
    pageComboBox->addItem(tr("Page 2"));
    pageComboBox->addItem(tr("Page 3"));
    connect(pageComboBox, SIGNAL(activated(int)),stackedWidget, SLOT(setCurrentIndex(int)));

填充堆叠部件时,部件将添加到内部列表中。indexOf() 函数返回该列表中部件的索引。部件可以使用 addWidget() 函数添加到列表的末尾,也可以使用insertWidget()函数插入到给定的索引处。removeWidget()函数从堆叠部件中删除部件。可以使用 count()函数获取堆叠部件中包含的部件数量。

简单Demo和说明

在实际应用中,QStackedWidget多与列表框QListWidget及下拉表框QComboBox配合使用。

在这里插入图片描述

GitHub链接 :StackDlg

    setWindowTitle(tr("QT基础之堆栈窗体QStackedWidget类"));
    // 创建 一个 QListWidget 控件对象 ,用于同 QStackedWidget 关联
    list = new QListWidget();
    list->addItem(tr("List 1"));
    list->addItem(tr("List 2"));
    list->addItem(tr("List 3"));


    // 创建 三个 QLabel 标签控件对象,作为堆栈窗口需要显示的三层窗体
    label1 = new QLabel(tr("WindowTest1"));
    label2 = new QLabel(tr("WindowTest2"));
    label3 = new QLabel(tr("WindowTest3"));

    // 创建 QStackedWidget 堆栈窗体对象
    stackedWidget = new QStackedWidget(this);
    // 将 三个 QLabel 标签控件对象 插入 QStackedWidget
    stackedWidget->addWidget(label1);
    stackedWidget->addWidget(label2);
    stackedWidget->addWidget(label3);
    // 创建 布局
    QHBoxLayout *layout = new QHBoxLayout(this);// 水平布局

    layout->setMargin(5); // 对话框或窗体 边距 5
    layout->setSpacing(5); // 各个控件之间的间距 5
    layout->addWidget(list);
    layout->addWidget(stackedWidget,5,Qt::AlignCenter);
    layout->setStretchFactor(list,1); // 设定可伸缩控件
    layout->setStretchFactor(stackedWidget,3);
    connect(list, SIGNAL(currentRowChanged(int)),stackedWidget, SLOT(setCurrentIndex(int)));

希望我的文章对于大家有帮助,由于个人能力的局限性,文中可能存在一些问题,欢迎指正、补充!

  • 5
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
动态生成 QTabWidget 可以通过在代码中使用 `QTabWidget::addTab()` 或 `QTabWidget::insertTab()` 方法来创建新的选项卡。而使用 QListWidget 和 QStackedWidget 来替代 QTabWidget 可以达到同样的效果,具体实现如下: 1. 首先,在 Qt Creator 中创建一个新的窗口应用程序项目。 2. 在主窗口中添加一个 QListWidget 和一个 QStackedWidget。 3. 在 QListWidget 中添加要显示的选项卡的名称。 4. 在 QStackedWidget 中添加要显示的选项卡的内容。 5. 在 QListWidget 的 `itemClicked()` 信号中,获取当前选中的项的索引,然后使用 `QStackedWidget::setCurrentIndex()` 方法将对应的选项卡内容显示出来。 以下是一个示例代码: ```cpp MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { ui.setupUi(this); // 添加选项卡 ui.listWidget->addItem("Tab 1"); ui.listWidget->addItem("Tab 2"); ui.listWidget->addItem("Tab 3"); // 添加选项卡内容 QWidget* widget1 = new QWidget(); QLabel* label1 = new QLabel("Tab 1 Content", widget1); QVBoxLayout* layout1 = new QVBoxLayout(widget1); layout1->addWidget(label1); ui.stackedWidget->addWidget(widget1); QWidget* widget2 = new QWidget(); QLabel* label2 = new QLabel("Tab 2 Content", widget2); QVBoxLayout* layout2 = new QVBoxLayout(widget2); layout2->addWidget(label2); ui.stackedWidget->addWidget(widget2); QWidget* widget3 = new QWidget(); QLabel* label3 = new QLabel("Tab 3 Content", widget3); QVBoxLayout* layout3 = new QVBoxLayout(widget3); layout3->addWidget(label3); ui.stackedWidget->addWidget(widget3); // 初始显示第一个选项卡内容 ui.stackedWidget->setCurrentIndex(0); // 连接 QListWidget 的 itemClicked() 信号 connect(ui.listWidget, &QListWidget::itemClicked, this, [=](QListWidgetItem* item){ int index = ui.listWidget->row(item); ui.stackedWidget->setCurrentIndex(index); }); } ``` 在上面的示例代码中,我们首先在 `MainWindow` 的构造函数中添加了三个选项卡,然后分别创建了三个 QWidget 对象作为选项卡的内容,并将它们添加到 QStackedWidget 中。然后使用 `QStackedWidget::setCurrentIndex()` 方法将初始显示的选项卡内容设置为第一个。最后,我们连接了 QListWidget 的 `itemClicked()` 信号,当用户点击一个选项卡时,获取对应的索引并使用 `QStackedWidget::setCurrentIndex()` 方法将对应的选项卡内容显示出来。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨1024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值