前言:本次实验是在三个窗口之间自由切换,窗口中播放gif格式的动态图。

让我们先来看看使用到的主要的函数:

一、播放gif格式动态图的函数

QMovie *movie = new QMovie("../form/1.gif");  // "../form/1.gif"图片路径
movie->start(); //开始播放动态图
ui->label->setMovie(movie); //将图片设置为为动态
ui->label->setScaledContents(true); //尽可能完整的播放整张动图 ,此处要设置为true

二、singnals信号槽的定义

()定义信号函数
signals:
void ShowTowForm(); //定义信号函数 ()发送信号
void threeform::ToTwoForm()
{
emit ShowTowForm(); //通过自定义的信号函数发送信号
this->hide();
} ()接收信号
connect(form3,SIGNAL(ShowTowForm()),this,SLOT(ShowThreeRespond())); //接收信号
参数:
form3:发送信号的类
ShowTowForm:form3类中发送信号的函数
this:接收信号的类
ShowThreeRespond:接收信号后this类中的响应函数

三、隐藏、显示窗口

this->hide(); //隐藏窗口
this->show(); //显示窗口

三个头文件分别为:

1、头文件oneform.h

 #ifndef ONEFORM_H
#define ONEFORM_H #include <QWidget>
#include "twoform.h" namespace Ui {
class oneform;
} class oneform : public QWidget
{
Q_OBJECT public:
explicit oneform(QWidget *parent = );
~oneform();
protected slots:
void ToTowForm(); //切换到第二页
void ShowOneRespond(); //接收到第二页发送的信号后响应的函数
private:
Ui::oneform *ui;
void Init();
twoform *form2;
}; #endif // ONEFORM_H

2、头文件towform.h

 #ifndef TWOFORM_H
#define TWOFORM_H #include <QWidget>
#include "threeform.h" namespace Ui {
class twoform;
} class twoform : public QWidget
{
Q_OBJECT public:
explicit twoform(QWidget *parent = );
~twoform(); protected slots:
void ToOneForm(); //发送信号到oneform
void ToThreeFrom(); //跳转到threeform
void ShowThreeRespond(); //接收到threeform发送过来的自定义信号响应槽函数 signals:
void ShowOneForm(); //自定义信号函数,发送信号给oneform
private:
Ui::twoform *ui;
void Init(); //初始化界面
threeform *form3; }; #endif // TWOFORM_H

3、头文件threeform.h

 #ifndef THREEFORM_H
#define THREEFORM_H #include <QWidget> namespace Ui {
class threeform;
} class threeform : public QWidget
{
Q_OBJECT public:
explicit threeform(QWidget *parent = );
~threeform();
protected slots:
void ToTwoForm(); //切换到第二页
signals:
void ShowTowForm(); //发送信号
private:
Ui::threeform *ui;
void Init();
}; #endif // THREEFORM_H

三个源文件分别为:

1、源文件oneform.cpp

 #include "oneform.h"
#include "ui_oneform.h"
#include <QMovie> oneform::oneform(QWidget *parent) :
QWidget(parent),
ui(new Ui::oneform)
{
ui->setupUi(this);
Init();
} oneform::~oneform()
{
delete ui;
} void oneform::Init()
{
QMovie *movie = new QMovie("../form/1.gif");
movie->start(); //开始播放动态图
ui->label->setMovie(movie); //将图片设置为为动态
ui->label->setScaledContents(true); //尽可能完整的播放整张动图
form2 = new twoform;
connect(ui->pushButton,SIGNAL(clicked(bool)),this,SLOT(ToTowForm()));//点击按钮响应下一页槽函数
connect(form2,SIGNAL(ShowOneForm()),this,SLOT(ShowOneRespond()));//接收form2发送的信号
} void oneform::ToTowForm()
{
this->hide();//隐藏本页
form2->show();//显示第二页
} void oneform::ShowOneRespond() //接收到form2发送的信号后响应的函数
{
this->show();//显示本页
}

2、源文件twoform.cpp

 #include "twoform.h"
#include "ui_twoform.h"
#include <QMovie>
#include <QDebug> twoform::twoform(QWidget *parent) :
QWidget(parent),
ui(new Ui::twoform)
{
ui->setupUi(this);
Init();
} twoform::~twoform()
{
delete ui;
} void twoform::Init()
{
QMovie *movie = new QMovie("../form/2.gif");
movie->start();
ui->label->setMovie(movie);
ui->label->setScaledContents(true);
form3 = new threeform();
connect(ui->pushButton,SIGNAL(clicked(bool)),this,SLOT(ToOneForm()));
connect(ui->pushButton_2,SIGNAL(clicked(bool)),this,SLOT(ToThreeFrom()));
connect(form3,SIGNAL(ShowTowForm()),this,SLOT(ShowThreeRespond())); //接收form3发送的信号 } void twoform::ToOneForm()
{
emit ShowOneForm();//发送信号
this->hide(); } void twoform::ToThreeFrom()
{
this->hide();
form3->show(); } void twoform::ShowThreeRespond()
{
this->show();
qDebug()<<"hello world";
}

3、源文件threeform.cpp

 #include "threeform.h"
#include "ui_threeform.h"
#include <QMovie> threeform::threeform(QWidget *parent) :
QWidget(parent),
ui(new Ui::threeform)
{
ui->setupUi(this);
Init();
} threeform::~threeform()
{
delete ui;
} void threeform::Init()
{
QMovie *movie = new QMovie("../form/3.gif");
movie->start();
ui->label_2->setMovie(movie);
ui->label_2->setScaledContents(true);
connect(ui->pushButton,SIGNAL(clicked(bool)),this,SLOT(ToTwoForm()));//绑定切换到第二页的槽函数
} void threeform::ToTwoForm()
{
emit ShowTowForm();//发送信号
this->hide();
}

三个界面文件分别为:

1、oneform的界面文件

2、twoform的界面文件

3、threeform的界面文件

最终效果是这样

QT制作窗口切换的小程序的更多相关文章

  1. 在线制作一键生成微信小程序实现原理之需求分析

    随着微信小程序接口不断的放开,小程序在今年或许是明年必将成为商家的一个标配,这个标配的标准就是要开发周期短,费用低,功能实用.只有这样才能让线下的广大商家快速接入.现在也有好多公司开发出了一键生成快速 ...

  2. 微信小程序-从零开始制作一个跑步微信小程序

    来源:伯乐在线 - 王小树 链接:http://ios.jobbole.com/90603/ 点击 → 申请加入伯乐在线专栏作者 一.准备工作 1.注册一个小程序账号,得用一个没注册过公众号的邮箱注册 ...

  3. 13.QT多窗口切换list

    Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog) { ui->setupUi(this); list = ...

  4. QT制作一个位图画图板程序

    本文学习如何创建一个Qt绘制程序,用户将能够通过使用不同的尺寸和画笔的颜色来表达他们的创造力. 主要功能:保存画板内容为图片.清除画板内容.设置画板大小.设置画笔颜色 新建基于QMainWindow的 ...

  5. win7系统的CMD窗口切换目录--小计

    经常使用win7系统的CMD窗口,需要切换到工作目录,方法如下: 1. Win + R 2. 在命令行输入 cmd 出现如下: C:\Users\admin> 3. 在以上输入 D: (表示切换 ...

  6. 微信小程序在线制作 自己制作微信小程序

    小程序是个什么东西?怎么自己制作微信小程序?微信小程序在线制作难吗?最近老是听这类问题,耳朵都长茧子了. 百牛信息技术bainiu.ltd整理发布于博客园 接下来作为一个技术人员的角度就为大家分析一下 ...

  7. 微信小程序开发详解——小程序,大颠覆!

    微信小程序开发 联系 苏念 188.1414.7927  微信小程序系统开发 微信新功能开发 小程序开发 小程序怎么开发 app小程序开发 简化小程序开发 微信小程序定制 小程序制作 开发微信小程序  ...

  8. 微信小程序开发学习资料

    作者:初雪链接:https://www.zhihu.com/question/50907897/answer/128494332来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  9. Qt多窗口编程详解

    常用的窗体基类是 QWidget.QDialog 和 QMainWindow,在创建 GUI 应用程序时选择窗体基类就是从这 3 个类中选择. QWidget 直接继承于 QObject,是 QDia ...

随机推荐

  1. 不错的JQuery屏幕居中提示信息封装,使用方便,可集成到项目

    function showLoad(tipInfo, type, autohide) { var pic = ""; switch (type) { case 0: // load ...

  2. Echarts数据可视化地理坐标系geo,开发全解+完美注释

    全栈工程师开发手册 (作者:栾鹏) Echarts数据可视化开发代码注释全解 Echarts数据可视化开发参数配置全解 6大公共组件详解(点击进入): title详解. tooltip详解.toolb ...

  3. J2EE走向成功路-02-Struts2 配置(Maven)

    在上一篇中,介绍了使用jar包搭建Struts2框架,这一篇中来介绍一下在Maven环境下搭建Struts2框架,主要为配置Maven. 1.下载Maven,官网:http://maven.apach ...

  4. 四种Sandcastle方法生成c#.net帮助类帮助文档

    方法一 前端时间在网上收集和自己平时工作总结整理了<干货,比较全面的c#.net公共帮助类>,整理完成上传github之后我又想,既然是帮助类,总得有个帮助文档于是乎想到了Sandcast ...

  5. springcloud之服务注册与发现(Eureka)

    springcloud服务注册与发现 使用Eureka实现服务治理 作用:实现服务治理(服务注册与发现) 简介: Spring Cloud Eureka是Spring Cloud Netflix项目下 ...

  6. vim中SnipMate 和 YouCompleteMe 插件触发键 tab 冲突

    花了好几天废了九牛二虎之力终于在win下把ycm插件装上了 然而在配置插件的时候发现snipmate插件与youcompleteme插件会发生tab键冲突 而ycm比较调,直接使snipmate插件完 ...

  7. Ubuntu15.04 网站服务器环境搭建,php/html/css等学习环境搭建教程

    ---恢复内容开始--- 本文部分参考自:http://www.cnblogs.com/emouse/archive/2013/06/07/3124009.html 原文中存在少量错误,已改正. 首先 ...

  8. C陷阱和缺陷学习笔记

    这段时间把<C陷阱和缺陷>看了,没时间自己写总结.就转一下别人的学习笔记吧http://bbs.chinaunix.net/thread-749888-1-1.html Chapter 1 ...

  9. C语言位操作

    #include <stdio.h> void print(int); int main(void) { int flag = 0xffe4; print(flag); printf(&q ...

  10. Kafka 学习笔记-基本概念

    一.基本概念 Kafka是一个分布式的,可分区的,可复制的消息系统 Kafka以由一个或多个服务以集群的方式运行,服务叫broker producer,consuer通过kafka topic发布,预 ...