QStackedWidgetd
在学习QT的过程中想到能不能实现类似Android的Freagment,点击按钮在一个窗口中跳转多个界面
创建工程
创建工程时将累信息——基类——修改为QWidget,不然会出现运行之后窗口上不显示内容的问题
mywidget.h文件
#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QWidget>
#include <QtWidgets/QWidget>
#include <QLabel>
#include <QGraphicsDropShadowEffect>
#include "ui_mywidget.h"
class QStackedWidget;
class QPushButton;
namespace Ui {
class myWidget;
}
class myWidget : public QWidget
{
Q_OBJECT
public:
explicit myWidget(QWidget *parent = 0);
~myWidget();
public slots:
void slt_setPageWidget();//根据所点击的按钮来进行相应widget显示的槽
private:
Ui::myWidget *ui;
QStackedWidget *stackWidget;
QPushButton *pageButton;
QPushButton *page2Button;
QPushButton *page3Button;
QLabel *line;
};
#endif // MYWIDGET_H
mywidget.cpp
#include "mywidget.h"
#include <qgridlayout.h>
#include <qlabel.h>
#include <qpushbutton.h>
#include <qstackedwidget.h>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QDebug>
#include <QMovie>
#include <QGraphicsDropShadowEffect>
#include <QLineEdit>
#include <QPixmap>
myWidget::myWidget(QWidget *parent)
: QWidget(parent)
{
ui->setupUi(this);
QPalette palette(this->palette());
palette.setColor(QPalette::Background, Qt::black);
this->setPalette(palette);
/*----star*************************************标题选项卡布局设置**************************************/
//创建QStackedWidget对象
stackWidget = new QStackedWidget;
//创建几个QPushButton来控制widget的显示
pageButton = new QPushButton();
page2Button = new QPushButton();
line=new QLabel();
//设置头部按钮的按下,接触,离开三个状态的样式
//按钮"登录"
pageButton->setText(u8"登录");
//按钮"注册"
page2Button->setText(u8"注册");
//将两个个按钮的clicked事件绑定到函数
connect(pageButton, &QPushButton::clicked, this, &myWidget::slt_setPageWidget);
connect(page2Button, &QPushButton::clicked, this, &myWidget::slt_setPageWidget);
//创建两个个QWidget对象
QWidget *widget[3];
/*----end*************************************标题选项卡布局设置**************************************/
/*---star***********************************两个页面的布局操作****************************************/
for (int i = 0; i < 3; ++i)
{
//按照下标进行一下QWidget的区分
widget[i] = new QWidget;
widget[i]->resize(400, 400);
QVBoxLayout *layout = new QVBoxLayout;
QHBoxLayout *pic_layout = new QHBoxLayout;
//创建容器设置其样式----star
QLabel *label = new QLabel();
//根据下标向不同创建不同的控件
if(i == 0){
//登录分页的页面
label->setText("页面1")
}
if(i == 1){
//注册部分页面
label->setText("页面1")
}
//向图片布局两侧添加弹簧+label+弹簧
pic_layout->addStretch();
pic_layout->addWidget(label);
pic_layout->addStretch();
//将以上布局置入主布局
layout->addLayout(pic_layout);
layout->addStretch();
//将添加了不同控件的主布局置入到对应的widget[]中
widget[i]->setLayout(layout);
//调用stackWidget方法添加三个widget到页面
stackWidget->addWidget(widget[i]);
}
/*----end***********************************两个页面的布局操作****************************************/
/*---star***************************创建一个头部选项卡布局并置入两个按钮*********************************/
QHBoxLayout *menu_bar = new QHBoxLayout;
menu_bar->addWidget(pageButton);
menu_bar->addWidget(line);
menu_bar->addWidget(page2Button);
menu_bar->addStretch();
/*---end***************************创建一个头部选项卡布局并置入两个按钮*********************************/
/*---star******************************将布局内容显示到窗口*******************************************/
//将之前创建的:头部选项卡布局,可变页面布局,完成按钮全部置入mainlayout
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addLayout(menu_bar);
mainLayout->addWidget(stackWidget);
//显示mainlayout布局
setLayout(mainLayout);
/*---end******************************将布局内容显示到窗口*******************************************/
}
/*---star***********************点击不同的标题选项卡切换不同界面的函数**********************************/
void myWidget::slt_setPageWidget()
{
//获取触发槽的是哪个部件所发出的信号,并获取到那个指针
QPushButton *widget = static_cast<QPushButton*>(sender());
if (widget == pageButton)
{
stackWidget->setCurrentIndex(0);//根据触发的按钮来进行所要显示的QWidget
}
else if (widget == page2Button)
{
stackWidget->setCurrentIndex(1);
}
}
/*---end*************************点击不同的标题选项卡切换不同界面的函数**********************************/
myWidget::~myWidget()
{
}
主要还是代码控制页面元素的问题,记下来免得以后忘记