QT制作窗口切換的小程序


前言:本次實驗是在三個窗口之間自由切換,窗口中播放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的界面文件

 

 

最終效果是這樣

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM