前言:本次實驗是在三個窗口之間自由切換,窗口中播放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 #include <QWidget> 5 #include "twoform.h" 6 7 namespace Ui { 8 class oneform; 9 } 10 11 class oneform : public QWidget 12 { 13 Q_OBJECT 14 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 #include <QWidget> 5 #include "threeform.h" 6 7 namespace Ui { 8 class twoform; 9 } 10 11 class twoform : public QWidget 12 { 13 Q_OBJECT 14 15 public: 16 explicit twoform(QWidget *parent = 0); 17 ~twoform(); 18 19 20 protected slots: 21 void ToOneForm(); //發送信號到oneform 22 void ToThreeFrom(); //跳轉到threeform 23 void ShowThreeRespond(); //接收到threeform發送過來的自定義信號響應槽函數 24 25 signals: 26 void ShowOneForm(); //自定義信號函數,發送信號給oneform 27 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 #include <QWidget> 5 6 namespace Ui { 7 class threeform; 8 } 9 10 class threeform : public QWidget 11 { 12 Q_OBJECT 13 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 #include <QMovie> 4 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 #include <QMovie> 4 #include <QDebug> 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 #include <QMovie> 4 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的界面文件
最終效果是這樣