前言:本次实验是在三个窗口之间自由切换,窗口中播放gif格式的动态图。
让我们先来看看使用到的主要的函数:
一、播放gif格式动态图的函数
QMovie *movie = new QMovie("../form/1.gif"); // "../form/1.gif"图片路径movie->start(); //开始播放动态图ui->label->setMovie(movie); //将图片设置为为动态ui->label->setScaledContents(true); //尽可能完整的播放整张动图 ,此处要设置为true
二、singnals信号槽的定义
(1)定义信号函数signals: void ShowTowForm(); //定义信号函数 (2)发送信号 void threeform::ToTwoForm() { emit ShowTowForm(); //通过自定义的信号函数发送信号 this->hide();}(3)接收信号 connect(form3,SIGNAL(ShowTowForm()),this,SLOT(ShowThreeRespond())); //接收信号 参数: form3:发送信号的类 ShowTowForm:form3类中发送信号的函数 this:接收信号的类 ShowThreeRespond:接收信号后this类中的响应函数
三、隐藏、显示窗口
this->hide(); //隐藏窗口this->show(); //显示窗口
三个头文件分别为:
1、头文件oneform.h
1 #ifndef ONEFORM_H 2 #define ONEFORM_H 3 4 #include5 #include "twoform.h" 6 7 namespace Ui { 8 class oneform; 9 }10 11 class oneform : public QWidget12 {13 Q_OBJECT14 15 public:16 explicit oneform(QWidget *parent = 0);17 ~oneform();18 protected slots:19 void ToTowForm(); //切换到第二页20 void ShowOneRespond(); //接收到第二页发送的信号后响应的函数21 private:22 Ui::oneform *ui;23 void Init();24 twoform *form2; 25 };26 27 #endif // ONEFORM_H
2、头文件towform.h
1 #ifndef TWOFORM_H 2 #define TWOFORM_H 3 4 #include5 #include "threeform.h" 6 7 namespace Ui { 8 class twoform; 9 }10 11 class twoform : public QWidget12 {13 Q_OBJECT14 15 public:16 explicit twoform(QWidget *parent = 0);17 ~twoform();18 19 20 protected slots:21 void ToOneForm(); //发送信号到oneform22 void ToThreeFrom(); //跳转到threeform23 void ShowThreeRespond(); //接收到threeform发送过来的自定义信号响应槽函数24 25 signals:26 void ShowOneForm(); //自定义信号函数,发送信号给oneform27 private:28 Ui::twoform *ui;29 void Init(); //初始化界面30 threeform *form3;31 32 };33 34 #endif // TWOFORM_H
3、头文件threeform.h
1 #ifndef THREEFORM_H 2 #define THREEFORM_H 3 4 #include5 6 namespace Ui { 7 class threeform; 8 } 9 10 class threeform : public QWidget11 {12 Q_OBJECT13 14 public:15 explicit threeform(QWidget *parent = 0);16 ~threeform();17 protected slots:18 void ToTwoForm(); //切换到第二页19 signals:20 void ShowTowForm(); //发送信号21 private:22 Ui::threeform *ui;23 void Init();24 };25 26 #endif // THREEFORM_H
三个源文件分别为:
1、源文件oneform.cpp
1 #include "oneform.h" 2 #include "ui_oneform.h" 3 #include4 5 oneform::oneform(QWidget *parent) : 6 QWidget(parent), 7 ui(new Ui::oneform) 8 { 9 ui->setupUi(this);10 Init();11 }12 13 oneform::~oneform()14 {15 delete ui;16 }17 18 void oneform::Init()19 {20 QMovie *movie = new QMovie("../form/1.gif");21 movie->start(); //开始播放动态图22 ui->label->setMovie(movie); //将图片设置为为动态23 ui->label->setScaledContents(true); //尽可能完整的播放整张动图24 form2 = new twoform;25 connect(ui->pushButton,SIGNAL(clicked(bool)),this,SLOT(ToTowForm()));//点击按钮响应下一页槽函数26 connect(form2,SIGNAL(ShowOneForm()),this,SLOT(ShowOneRespond()));//接收form2发送的信号27 }28 29 void oneform::ToTowForm()30 {31 this->hide();//隐藏本页32 form2->show();//显示第二页33 }34 35 void oneform::ShowOneRespond() //接收到form2发送的信号后响应的函数36 {37 this->show();//显示本页38 }
2、源文件twoform.cpp
1 #include "twoform.h" 2 #include "ui_twoform.h" 3 #include4 #include 5 6 twoform::twoform(QWidget *parent) : 7 QWidget(parent), 8 ui(new Ui::twoform) 9 {10 ui->setupUi(this);11 Init();12 }13 14 twoform::~twoform()15 {16 delete ui;17 }18 19 void twoform::Init()20 {21 QMovie *movie = new QMovie("../form/2.gif");22 movie->start();23 ui->label->setMovie(movie);24 ui->label->setScaledContents(true);25 form3 = new threeform();26 connect(ui->pushButton,SIGNAL(clicked(bool)),this,SLOT(ToOneForm()));27 connect(ui->pushButton_2,SIGNAL(clicked(bool)),this,SLOT(ToThreeFrom()));28 connect(form3,SIGNAL(ShowTowForm()),this,SLOT(ShowThreeRespond())); //接收form3发送的信号29 30 }31 32 void twoform::ToOneForm()33 {34 emit ShowOneForm();//发送信号35 this->hide();36 37 }38 39 void twoform::ToThreeFrom()40 {41 this->hide();42 form3->show();43 44 }45 46 void twoform::ShowThreeRespond()47 {48 this->show();49 qDebug()<<"hello world";50 }
3、源文件threeform.cpp
1 #include "threeform.h" 2 #include "ui_threeform.h" 3 #include4 5 threeform::threeform(QWidget *parent) : 6 QWidget(parent), 7 ui(new Ui::threeform) 8 { 9 ui->setupUi(this);10 Init();11 }12 13 threeform::~threeform()14 {15 delete ui;16 }17 18 void threeform::Init()19 {20 QMovie *movie = new QMovie("../form/3.gif");21 movie->start();22 ui->label_2->setMovie(movie);23 ui->label_2->setScaledContents(true);24 connect(ui->pushButton,SIGNAL(clicked(bool)),this,SLOT(ToTwoForm()));//绑定切换到第二页的槽函数25 }26 27 void threeform::ToTwoForm()28 {29 emit ShowTowForm();//发送信号30 this->hide();31 }
三个界面文件分别为:
1、oneform的界面文件
2、twoform的界面文件
3、threeform的界面文件
最终效果是这样