本文介绍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控件,并在代码中插入上面新设计的页面,主界面构造函数如下:
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类的使用。