您的位置:首页 > 游戏 > 手游 > QStackedWidget类的使用

QStackedWidget类的使用

2024/12/23 11:25:04 来源:https://blog.csdn.net/propor/article/details/142096567  浏览:    关键词:QStackedWidget类的使用

本文介绍QStackedWidget类的使用。

StackedWidget控件在Qt应用程序开发过程中用的还是比较多的,配合按钮可以实现多个页面之间相互切换,方便了应用程序的开发,本文简要介绍QStackedWidget类实际使用过程中的常用方法,并给出一个简单例程。

1.QStackedWidget类常用方法

1)添加页面

a)追加页面

函数原型如下:

int addWidget(QWidget *widget);

在StackedWidget中追加页面,函数返回该页面的序号,这里的页面可以采用新建一个基于Widget的“FormClass”,并将它添加到StackedWidget中,下同。

b)根据序号插入页面

函数原型如下:

int insertWidget(int index, QWidget *widget);

函数返回该页面的序号。

2)删除页面

函数原型如下:

void removeWidget(QWidget *widget);

此方法仅从StackedWidget上删除(隐藏),并没有将页面删除,可通过添加页面方法重新添加。

3)设置页面

a)通过序号设置

函数原型如下:

void setCurrentIndex(int index);

b)通过页面控件设置

函数原型如下:

void setCurrentWidget(QWidget *widget);

4)获取页面

a)获取页面序号

函数原型如下:

int currentIndex() const;

b)获取页面指针

函数原型如下:

QWidget *currentWidget() const;

2.例程

1)需求

实现点击不同按钮切换到不同页面,各页面包含相应的子控件,实现页面对应功能。

2)实现

实现方法有2种,这里主要介绍方法2。

a)方法1

直接在ui界面中添加相应的页面,并在各自页面中放置相应的控件,在主界面设置信号,槽,并实现页面切换及各页面功能,此法和普通的界面功能实现并无2样(仅增加了一个页面切换),缺点是所有的功能实现都在主窗口内,代码会比较冗长,不够清晰。ui界面设计如下图。

b)方法2

新建若干个基于Widget的“FormClass”(需要几个页面就新建几个),如下图。

分别在几个页面中添加控件,并在各自类中实现页面对应功能,在主界面ui添加StackedWidget控件,主界面ui设计如下图。

在代码中编写代码,插入上面新设计的页面,主界面相关函数如下:

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);page0 = new Page0(this);page1 = new Page1(this);ui->stackedWidget->insertWidget(0, page0);ui->stackedWidget->insertWidget(1, page1);ui->stackedWidget->setCurrentIndex(0);connect(ui->btnPage0, &QPushButton::clicked, this, &MainWindow::onBtnPage0Clicked);connect(ui->btnPage1, &QPushButton::clicked, this, &MainWindow::onBtnPage1Clicked);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::onBtnPage0Clicked(void)
{ui->stackedWidget->setCurrentIndex(0);
}void MainWindow::onBtnPage1Clicked(void)
{ui->stackedWidget->setCurrentIndex(1);
}

方法2的优点是各子页面功能可分别在各自不同的类中实现,编码更清晰。

总结,本文介绍了QStackedWidget类的使用。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com