1.多界面跳转
A界面跳到B界面,不需要返回(B不可以回到A)
A界面跳到B界面,需要返回(B还可以回到A)2.如何在QT工程中新增界面(新增主窗口)
步骤: 右键点击工程名--》选择add new--》选择QT,选择QT设计师界面类--》模板选择MainWindow,名字自己取3.跳到下一个界面,不需要返回
//跳到下一个界面
secondwin *newwin=new secondwin();
newwin->show();
//把登录界面关闭
this->close();跳到下一个界面,需要返回
//跳到下一个界面
secondwin *newwin=new secondwin(this); //此时必须传递this指针,原因是下一个界面可以通过这个this指针找到上一级的界面的地址
newwin->show();
//把登录界面隐藏
this->hide(); //隐藏是把界面转入到系统后面偷偷摸摸运行//返回上一级界面
QWidget *p=this->parentWidget(); //得到上一级界面的地址
p->show();
//当前主界面关闭
delete this;4.界面之间传递参数(本质上类和类之间传递参数)
A界面--》登录界面(输入了用户名和密码)
B界面--》主界面
要求把A界面的数据(用户名和密码)传递给B界面
方法思路:
在B界面类中定义公有方法获取A界面传递的参数,在创建B界面对象的时候,调用这个公有方法就可以把参数传递给B界面
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "secondwin.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
flag=0;
}
MainWindow::~MainWindow()
{
delete ui;
}
//登录按钮的槽函数
void MainWindow::on_loginbt_clicked()
{
static int n=0;
//获取输入框中输入的用户名和密码
QString name=ui->namele->text();
QString passwd=ui->passle->text();
//判断用户名或者密码是否正确
if(name=="gec" && passwd=="123456")
{
qDebug()<<"第一个界面的地址是: "<<this;
//跳到下一个界面
secondwin *newwin=new secondwin(this);
newwin->getattr(name,passwd);
newwin->show();
//把登录界面隐藏
this->hide(); //隐藏是把界面转入到系统后面偷偷摸摸运行
}
else
{
n++;
if(n>=3)
{
ui->namele->setEnabled(false);
ui->passle->setEnabled(false);
}
}
}
//显示/隐藏密码
void MainWindow::on_showbt_clicked()
{
flag++;
if(flag%2==1)
ui->passle->setEchoMode(QLineEdit::Normal);
else
ui->passle->setEchoMode(QLineEdit::Password);
}
#include "secondwin.h"
#include "ui_secondwin.h"
#include "ledwin.h" //控灯的子界面
#include "airwin.h" //控制空调的子界面
#include <QDebug>
secondwin::secondwin(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::secondwin)
{
ui->setupUi(this);
qDebug()<<"传递过来第一个界面的地址是: "<<parent;
}
secondwin::~secondwin()
{
delete ui;
}
//该函数专门用来接收第一个界面传递的参数
void secondwin::getattr(QString _name, QString _passwd)
{
qDebug()<<"传递过来的账号是: "<<_name;
qDebug()<<"传递过来的密码是: "<<_passwd;
//把传递过来的信息在标签上刷出来
ui->msgle->setText(_name+":"+_passwd);
}
//返回到上一级界面--》登录界面
void secondwin::on_pushButton_5_clicked()
{
//返回上一级界面
QWidget *p=this->parentWidget(); //得到上一级界面的地址
qDebug()<<"p指向的地址是: "<<p;
p->show();
//当前主界面关闭
delete this;
}
//控灯
void secondwin::on_pushButton_clicked()
{
ledwin *newwin=new ledwin(this);
newwin->show();
//当前窗口隐藏
this->hide();
}
//控制空调
void secondwin::on_pushButton_2_clicked()
{
airwin *newwin=new airwin(this);
newwin->show();
//当前窗口隐藏
this->hide();
}