前言:本次实验是在三个窗口之间自由切换,窗口中播放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. Java高级工程师进阶路线

    第一部分:宏观方面 一. JAVA.要想成为JAVA(高级)工程师肯定要学习JAVA.一般的程序员或许只需知道一些JAVA的语法结构就可以应付了.但要成为JAVA(高级) 工程师,您要对JAVA做比较 ...

  2. Python自学笔记-生成器(来自廖雪峰的官网Python3)

    感觉廖雪峰的官网http://www.liaoxuefeng.com/里面的教程不错,所以学习一下,把需要复习的摘抄一下. 以下内容主要为了自己复习用,详细内容请登录廖雪峰的官网查看. 生成器 通过列 ...

  3. mybatis一对一嵌套查询

    要求:查询一个员工的时候,把他对应的部门也查询出来 实现(其他配置这里不作说明,框架基于spring_springMVC_mybatis_oracle): 如有不对或不适的地方,请多多指教. 1.新建 ...

  4. IEnumerable,ICollection,IList,List之间的区别

    做C#的同学们,都知道,一类只能有一个继承类,但可以实现多个接口.这句话就告诉我们:IEnumerable,ICollection,IList,List区别了 // 摘要: // 公开枚举器,该枚举器 ...

  5. typescript 的 polyfill 学习

    我们知道typescript 是ES 超集.这意味着,不仅仅ES 的各种语法特性都会包括,还能保证通过typescript的编译服务可以很方便的转成ES向下兼容的版本,这得意于typescript强大 ...

  6. C 结构体零散知识点

    1.结构体无法把自己作为成员,但可以包含指向自己的指针成员 2.定义不完整结构类型(类型,结构,占用空间无法确定,如void指针,声明没有指明数组长度数组)只能使用小标签,即struct struct ...

  7. Spring 组成

    Spring 主要由 Bean Context Core 三个组件组成 Bean 组件是整个 Spring 核心,Spring 通过管理 Bean 组件提供服务 Context 是 Bean 组件容器 ...

  8. Fastify 系列教程二 (中间件、钩子函数和装饰器)

    Fastify 系列教程: Fastify 系列教程一 (路由和日志) Fastify 系列教程二 (中间件.钩子函数和装饰器) 中间件 Fastify 提供了与 Express 和 Restify ...

  9. 处理MySQL服务器无法启动的问题

    MySQL数据库在升级到5.7版本后,和之前的版本有些不一样,没有data文件夹,我们都知道MySQL数据库文件是保存在data文件夹中的,网上有人说把5.6版本的data文件夹拷贝一个,这种说法听听 ...

  10. 自学LinkedBlockingQueue源码

    自学LinkedBlockingQueue源码 参考:http://www.jianshu.com/p/cc2281b1a6bc 本文需要关注的地方 生产者-消费者模式好处: 读取和插入操作所使用的锁 ...