QT多个窗体切换显示
2021-01-13 23:11
标签:设计师 button mamicode bool 功能 timeout setup code explicit 实现效果如下: 第一个窗体显示一张gif动图,第二个窗体显示另一张动图,第三个窗体显示一个0-100的计数器 第一个界面的下方按钮可以点击跳转到第二个界面,第二个界面下方可以选择跳转到第一个或者到第三个界面,第三个界面下方有一个返回第二个界面的按钮 实现各个页面的跳转显示且每次只会显示一个界面 一、建立一个Qwidget工程,在ui里面添加一个按钮button和一个标签label;
二、右键项目名称,在弹出的选项中选择 “添加新文件”
三、选择QT->Qt设计师界面类,点击右下方choose; 四、选择widget,点击右下方下一步; 五、自己给这个窗体取一个名字,点击下一步(如此便创建成功第二个界面和它的头文件和源文件) 六、重复上面2-5步建立第三个窗体文件,最后工程里面应该一共包括有以下文件 我的工程里widget.ui是第一个界面,secondform是第二个界面,thirdform是第三个界面 七、在第二个、第三个界面中放入控件 第二个界面放入两个按钮pushbutton和一个标签label;第三个界面放入一个按钮pushbutton和一个LCDnumber。如下图所示:(按钮名字可以自己取) 八、 各个窗体头文件定义,所有槽函数定义对应于要实现的功能,对应于各个按钮按下后要实现的事件 在第一个Widget的头文件中定义一个处理跳转到第二个界面的槽函数doprocessclickgotosecondform(bool)和一个接收来自第二个界面发送请求信号的槽函数doprocesssecondformrequest(QString),代码如下所示: 在第二个窗体头文件里定义跳转到第一个和第三个窗体的槽函数doProcessClickBackToFirstForm(bool)、doProcessClickGoToThirdForm(bool),还有从第三个界面发送来的显示第二个界面的槽函数doProcessShowSecondForm();如下所示: 第三个窗体头文件中定义一个跳转到第二个界面的槽函数doprocessbacktosecondform()和一个定时器的超时槽函数doprocesstimeout() 九、对各个槽函数的实现,在各个窗体对应的源程序中进行实现,如下所示:对所有代码都有详细的注释和说明 第一个窗体 第二个窗体 第三个窗体 QT多个窗体切换显示 标签:设计师 button mamicode bool 功能 timeout setup code explicit 原文地址:https://www.cnblogs.com/victorywr/p/12284501.html#ifndef WIDGET_H
#define WIDGET_H
#include
#ifndef SECONDFORM_H
#define SECONDFORM_H
#include
#ifndef THIRDFORM_H
#define THIRDFORM_H
#include
#include "widget.h"
#include "ui_widget.h"
#include"QMovie"
#include"QDebug"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
Init();
}
Widget::~Widget()
{
delete ui;
}
void Widget::Init()
{
QMovie *movie=new QMovie("../chuangtiqiehuang/1.gif");
movie->start();
ui->label->setMovie(movie);
ui->label->setScaledContents(true); //画面铺满整个标签
connect(ui->pushButton,SIGNAL(clicked(bool)),this,SLOT(doprocessclickgotosecondform(bool))); //去到第二个界面的信号与槽事件
sf1 =new secondForm();
connect(sf1,SIGNAL(SignalShowFirstForm(QString)),this,SLOT(doprocesssecondformrequest(QString))); //发送者是第二个界面sf1对象 ,信号是SignalShowFirstForm(QString))
}
void Widget::doprocessclickgotosecondform(bool){
//方式一:创建全局变量 第二个界面的对象,若tf1是局部变量,则不会显示第二个界面,因为调用完局部变量就被释放掉了
sf1->show();//sf1是在第一个界面头文件里定义的全局变量
//方式二:创建对象指针,指针则可以是局部的
//secondForm *sf2=new secondForm(); //若改变形式为 secondForm *sf2=new secondForm(this) 子窗体将会在父窗体内显示
//sf2->show(); //方式二没点击一次按钮信号就会产生一个二号界面,每触发一次槽事件就会给指针赋予一个新值
this->hide();//隐藏当前的窗体
}
void Widget::doprocesssecondformrequest(QString str){
qDebug()endl;
this->show(); //打印后显示当前(第一个窗体)界面
}
#include "secondform.h"
#include "ui_secondform.h"
#include"QMovie"
secondForm::secondForm(QWidget *parent) :
QWidget(parent),
ui(new Ui::secondForm)
{
ui->setupUi(this);
Init();
}
secondForm::~secondForm()
{
delete ui;
}
void secondForm::Init()
{
click_count=0;
QMovie *movie=new QMovie("../chuangtiqiehuang/2.gif");
movie->start();
ui->label->setMovie(movie);
ui->label->setScaledContents(true);
connect(ui->pushButton,SIGNAL(clicked(bool)),this,SLOT(doProcessClickBackToFirstForm(bool)));
p_tr=new thirdForm();
connect(ui->pushButton_2,SIGNAL(clicked(bool)),this,SLOT(doProcessClickGoToThirdForm(bool)));
connect(p_tr,SIGNAL(SignalshowsecondForm()),this,SLOT(doProcessShowSecondForm())); //第三个界面发来信号显示第二个界面
}
void secondForm::doProcessClickBackToFirstForm(bool){
//发送信号,通知第一个窗体显示
click_count++;
emit SignalShowFirstForm(QString::number(click_count)); //发送信号,通知第一个窗体显示,定义一个发出信号
this->hide(); //发送信号后隐藏当前(第二个窗体)界面
}
void secondForm::doProcessClickGoToThirdForm(bool)
{
p_tr->show();
this->hide();
}
void secondForm::doProcessShowSecondForm(){
this->show();
}
#include "thirdform.h"
#include "ui_thirdform.h"
thirdForm::thirdForm(QWidget *parent) :
QWidget(parent),
ui(new Ui::thirdForm)
{
ui->setupUi(this);
Init();
}
thirdForm::~thirdForm()
{
delete ui;
}
void thirdForm::Init(){
count=0;
mytimer=new QTimer(this);
connect(mytimer,SIGNAL(timeout()),this,SLOT(doprocesstimeout()));
mytimer->start(100);//定时器每100ms触发一次超时事件
connect(ui->pushButton,SIGNAL(clicked(bool)),this,SLOT(doprocessbacktosecondform()));
}
void thirdForm::doprocesstimeout(){
count++;
if(count==100)
count=0;
ui->lcdNumber->display(count);
}
void thirdForm::doprocessbacktosecondform(){
emit SignalshowsecondForm(); //发送到第二个界面的请求显示第二个界面的信号
this->hide();
}
上一篇:Windows装机必备