目录

一:开机动画 效果展示

二:开机动画 核心源码

三:项目完整源码分享


一:开机动画 效果展示

图元相互靠近,在碰撞检测后,跳转至登录界面 

在登录界面中,输入正确的用户名以及密码 

登录成功后,进入到视频播放器界面 

二:开机动画 核心源码

myview.h .cpp 【视图类】

#ifndef MYVIEW_H
#define MYVIEW_H#include <QObject>
#include<QGraphicsView>    //视图
#include<QGraphicsScene>   //场景
#include"myitem.h"
#include<QTimer>//定时器class myView : public QGraphicsView//派生出自己的视图类
{Q_OBJECT
public:explicit myView();QGraphicsScene *myScene;//视图中放置场景myItem *item1;myItem *item2;QTimer *timer;QTimer *timer2;signals:public slots:void timeSlot();void checkItemstatusSlot();//检测图元状态
};#endif // MYVIEW_H
#include "myview.h"
#include<QDebug>
#include"indexwin.h"
#include"widget.h"myView::myView()
{//视图设置尺寸this->resize(800,800);QGraphicsScene *myScene = new QGraphicsScene;//视图中添加场景this->setScene(myScene);//新建两个图元item1 = new myItem(":/image/050302.png",1,false);//图元1类型 false未碰撞item2 = new myItem(":/image/050302.png",2,false);//图元2类型 false未碰撞//设置好位置item1->setPos(100,this->height()/2);item2->setPos(500,this->height()/2);//添加到场景当中myScene->addItem(item1);  //场景中放置图元myScene->addItem(item2);  //场景中放置图元//图元的移动使用到定时器timer = new QTimer(this);//connect(timer,SIGNAL(timeout()),this,SLOT(timeSlot()));//让场景中的图元得到控制connect(timer,SIGNAL(timeout()),myScene,SLOT(advance()));timer->start(1000);//使用定时器检测图元的状态timer2 = new QTimer(this);connect(timer2,SIGNAL(timeout()),this,SLOT(checkItemstatusSlot()));timer2->start(1000);}void myView::timeSlot()
{qDebug()<<"timeSlot";}//检测图元状态
void myView::checkItemstatusSlot()
{if(item1->isStatus == true){//图元状态为碰撞时停止 -- 两个定时器都停止//碰撞过后,图元的状态需要复位timer->stop();item1->isStatus = false;timer2->stop();//跳转界面//IndexWin *mywin = new IndexWin;//mywin->show();//this->hide();//发生碰撞之后 跳转出一个新的界面Widget *denglu = new Widget;denglu->show();this->hide();}
}

myitem.h .cpp【图元类】

#ifndef MYITEM_H
#define MYITEM_H#include <QObject>
#include<QGraphicsItem>//图元class myItem : public QObject,public QGraphicsItem
{Q_OBJECT
public:explicit myItem(QObject *parent = 0);myItem(QString filename,int iType,bool isStatus);//碰撞检测函数QRectF boundingRect() const;//虚函数函数字体是斜体字//图元绘制函数void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);QPixmap image;  //图元样式int iType;      //图元类型 根据类型来控制某个图元的运动bool isStatus;  //图元状态 判断是否发生碰撞signals:public slots:void advance(int phase);//纯虚函数 -- 需要实现
};#endif // MYITEM_H
#include "myitem.h"
#include<QPainter>
#include<QDebug>
#include"indexwin.h"myItem::myItem(QObject *parent) : QObject(parent)
{}myItem::myItem(QString filename, int iType, bool isStatus)
{image.load(filename);this->iType = iType;this->isStatus = isStatus;
}//碰撞 特效 需要的类
//返回值:一个矩形
QRectF myItem::boundingRect() const
{return QRectF(0-image.width()/2,0-image.height()/2,image.width(),image.height());
}void myItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{painter->drawPixmap(0-image.width()/2,0-image.height()/2,image.width(),image.height(),image);
}//图元移动的相关操作
void myItem::advance(int phase)
{qDebug()<<"advance";if(this->iType ==1){//先偏移 后状态//坐标相对于场景进行变化  方向 位置this->setPos(mapToScene(2,0));//-2向左移动//碰撞会将图元加到链表//链表数量大于0就是发生碰撞了if(collidingItems().count()>0){qDebug()<<"碰撞了";//发送了碰撞 - 改变状态this->isStatus = true;}}if(this->iType ==2){//坐标相对于场景进行变化  方向 位置this->setPos(mapToScene(-2,0));//2向右移动}
}

三:项目完整源码分享

indexwin.h .cpp【布局设计的学习】

#ifndef INDEXWIN_H
#define INDEXWIN_H#include <QWidget>
#include<QVBoxLayout>//垂直布局
#include<QHBoxLayout>//水平布局
#include<QPushButton>
#include<QLineEdit>
#include<QListWidget>//制作视频页面列表class IndexWin : public QWidget
{Q_OBJECT
public:explicit IndexWin(QWidget *parent = 0);QWidget *leftwin;QWidget *topwin;QWidget *indexwin;QWidget *rightwin;QListWidget *videowinlist;//制作视频页面列表QLineEdit *searchEdit;QPushButton *userBtn;QPushButton *vipBtn;signals:public slots:void goNewwinSlot();
};#endif // INDEXWIN_H
#include "indexwin.h"
#include<QStringList>
#include<QDebug>
#include<QMessageBox>//弹窗
#include<QListWidget>//多个按钮显示,存放窗口的容器
#include<QDir>//路径
#include<QPixmap>//放置图片
#include<QListView>//设置图片模式IndexWin::IndexWin(QWidget *parent) : QWidget(parent)
{this->resize(1500,800);leftwin = new QWidget();topwin = new QWidget();//indexwin = new QWidget();rightwin = new QWidget();videowinlist = new QListWidget();//视频列表//设置图片模式--上面图片下面名称videowinlist->setViewMode(QListView::IconMode);//获取视频图片路径QString videopath = QDir::currentPath()+"/image";qDebug()<<videopath;QDir dir(videopath);//查找目录QStringList moviename;moviename << "*.png";//查找.png图片QStringList files = dir.entryList(moviename,QDir::Files|QDir::Readable,QDir::Name);qDebug()<<files; //查找.png图片名for(int i=0;i<files.size();i++){//显示.png图片及名称QListWidgetItem *newitem = new QListWidgetItem(QIcon(QPixmap(videopath+"/"+files.at(i))),files.at(i));//设置图片尺寸newitem->setSizeHint(QSize(200,250));videowinlist->addItem(newitem);}//方法一:自定义所有控件//控件水平  顶部控件水平分布QHBoxLayout *hboxlayout = new QHBoxLayout(topwin);searchEdit = new QLineEdit();userBtn = new QPushButton();vipBtn = new QPushButton();hboxlayout->addStretch();hboxlayout->addWidget(searchEdit);hboxlayout->addWidget(userBtn);hboxlayout->addWidget(vipBtn);//方法二:动态创建所有控件//按钮控件垂直  左边窗口放置一个垂直布局QVBoxLayout *vboxlayout1 = new QVBoxLayout(leftwin);QStringList funBtnlist;funBtnlist<<"logo"<<"视频"<<"动漫"<<"电影"<<"NBA"<<"纪录片"<<"少儿";for(int i=0;i<funBtnlist.size();i++){QPushButton *newBtn = new QPushButton(funBtnlist.at(i));//多个按钮绑定一个槽connect(newBtn,SIGNAL(clicked(bool)),this,SLOT(goNewwinSlot()));vboxlayout1->addWidget(newBtn);}//加空白 -- 将按钮上置vboxlayout1->addStretch();//两个窗口垂直//右半部分的布局放置顶部窗口和主窗口QVBoxLayout *rightboxlayout = new QVBoxLayout(rightwin);rightboxlayout->addWidget(topwin);//rightboxlayout->addWidget(indexwin);rightboxlayout->addWidget(videowinlist);//左边窗口和前面两个窗口垂直的部分 进行水平放置  最大的布局有thisQHBoxLayout *mainlayout = new QHBoxLayout(this);mainlayout->addWidget(leftwin);//放置窗口//mainlayout->addLayout(rightboxlayout);//放置布局mainlayout->addWidget(rightwin);
}void IndexWin::goNewwinSlot()
{//获取点击按钮的文本信息QPushButton *btn = (QPushButton *)sender();QString btnName = btn->text();qDebug()<<btn->text();//根据文本进行判断//更新列表 分文件管理if(btnName == "logo"){//弹窗显示信息QMessageBox::information(NULL,"logo模块",btn->text());//更新logo列表}if(btnName == "视频"){QMessageBox::information(NULL,"电视模块",btn->text());//更新视频列表}if(btnName == "动漫"){QMessageBox::information(NULL,"动漫模块",btn->text());//更新动漫列表}if(btnName == "电影"){QMessageBox::information(NULL,"电影模块",btn->text());//更新电影列表}
}

widget.h .cpp【界面绘制 信号和槽 的学习】

#ifndef WIDGET_H
#define WIDGET_H#include<QPushButton>//按钮
#include<QLineEdit>//编辑框
#include<QLabel> //文本
#include<QMovie> //动态图#include <QWidget>
#include<QList>
#include"usersdata.h"class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = 0);~Widget();QPushButton *loginBtn; //登录按钮QLineEdit *userEdit;   //用户编辑框QLineEdit *pwdEdit;    //密码编辑框QLabel *logoLab;       //logo文本,放置图片QLabel *userLab;       //用户文本QLabel *pwdLab;        //密码文本QLabel *loginLab;      //登录界面文本QLabel *gifLab;        //放置动态图文本QMovie *movie;         //动态图QList<usersdata *> userlist;//用户链表//所有槽函数的定义使用
public slots:void goLoginSlot();
};#endif // WIDGET_H
#include "widget.h"
#include<QDebug>     //输出头文件
#include"indexwin.h" //主界面窗口
#include<QDesktopWidget>//分辨率Widget::Widget(QWidget *parent): QWidget(parent)
{//数据类的准备usersdata *user1 = new usersdata("admin","123456");usersdata *user2 = new usersdata("manager","123456");userlist.append(user1);userlist.append(user2);//窗口大小设置this->resize(500,400);//setWindowFlags(Qt::FramelessWindowHint);//无边框//setAttribute(Qt::WA_TranslucentBackground);//背景透明QDesktopWidget w;int deskWidth = w.width();int deskHeight = w.height();qDebug()<<deskWidth<<deskHeight;//创建对象loginBtn = new QPushButton(this);userEdit = new QLineEdit(this);pwdEdit = new QLineEdit(this);logoLab = new QLabel(this);userLab = new QLabel(this);pwdLab = new QLabel(this);loginLab = new QLabel(this);gifLab = new QLabel(this);gifLab->resize(100,100);              //动态图文本大小movie = new QMovie("image/0505.gif"); //创建对象-动态图选择gifLab->setMovie(movie);              //放置动态图movie->start();                       //动态图显示// loginBtn->setText("登录");//登录按钮的起始位置,宽高设置loginBtn->setGeometry(200,200,100,50);//在登录按钮中放置图片loginBtn->setIcon(QIcon(QPixmap(":/image/050302.png")));//图片自适应按钮大小loginBtn->setIconSize(QSize(100,50));//userEdit->setGeometry(200,100,250,20);//pwdEdit->setGeometry(200,150,250,20);//用户编辑框起始位置userEdit->move(200,100);//用户编辑框提示内容信息userEdit->setPlaceholderText("请输入用户名");//用户编辑框设置输入长度userEdit->setMaxLength(11);//密码编辑框起始位置pwdEdit->move(200,150);//密码编辑框提示内容信息pwdEdit->setPlaceholderText("请输入密码");//密码编辑框设置输入长度pwdEdit->setMaxLength(8);//密码编辑框设置输入内容密文显示pwdEdit->setEchoMode(QLineEdit::Password);//logo文本大小//logoLab->resize(100,50);//放置logo图片到logoLab文本中//logoLab->setPixmap(QPixmap(":/image/050301.png").scaled(logoLab->size()));//用户名文本起始位置userLab->move(100,100);//用户名文本内容userLab->setText("用户名");//密码文本起始位置pwdLab->move(100,150);//密码文本内容pwdLab->setText("密码");//登录文本位置loginLab->move(250,40);//登录文本内容loginLab->setText("登录界面");//按钮点击让窗口关闭//connect(loginBtn,SIGNAL(clicked(bool)),this,SLOT(close()));//点击按钮跳转主界面connect(loginBtn,SIGNAL(clicked(bool)),this,SLOT(goLoginSlot()));
}Widget::~Widget()
{}void Widget::goLoginSlot()
{qDebug()<<"点击登录";//获取 编辑框内容QString username = userEdit->text();//qDebug()<<username;QString userpwd = pwdEdit->text();//字符串形式toLatin1转成数组形式for(int i=0;i<userlist.size();i++){//if(strcmp(username.toLatin1(),userlist.at(i)->getUsername().toLatin1()) == 0// &&strcmp(userpwd.toLatin1(),userlist.at(i)->getUserpwd().toLatin1()) == 0)if(username.compare(username,userlist.at(i)->getUsername())==0&&userpwd.compare(userpwd,userlist.at(i)->getUserpwd())==0){qDebug()<<"登录成功";IndexWin *p = new IndexWin;p->show();this->hide();}}
}

usersdata.h .cpp【多用户登录的学习】

#ifndef USERSDATA_H
#define USERSDATA_H
#include<QString>//字符串class usersdata
{
public:usersdata();//默认构造usersdata(QString username,QString userpwd);//带参构造void setUsername(QString username);QString getUsername();void setUserpwd(QString userpwd);QString getUserpwd();private:QString username;QString userpwd;
};#endif // USERSDATA_H
#include "usersdata.h"usersdata::usersdata()
{}usersdata::usersdata(QString username, QString userpwd)
{this->username = username;this->userpwd = userpwd;
}void usersdata::setUsername(QString username)
{this->username = username;
}QString usersdata::getUsername()
{return username;
}void usersdata::setUserpwd(QString userpwd)
{this->userpwd = userpwd;
}QString usersdata::getUserpwd()
{return userpwd;
}

main.cpp【程序主入口】

#include "widget.h"
#include <QApplication>
#include"indexwin.h"
#include<QGraphicsScene>   //场景
#include<QGraphicsRectItem>//图元
#include<QGraphicsView>    //视图
#include<QTransform>
#include"myview.h"int main(int argc, char *argv[])
{QApplication a(argc, argv);//开机动画myView kaiji;kaiji.show();return a.exec();
}

【Qt学习】 开机动画设计相关推荐

  1. 【张亚飞】 准确、完整地把握Flash动画设计的知识体系——Flash用户入门必读...

    [摘    要] 本文明确阐述了在应用Flash进行动画创作和部署的完整知识,对知识体系进行了总结归纳,在知识不断增长和爆炸的时代,我们建立一个逻辑的知识体系,以利于用户快速.准确.完整地掌握它. [ ...

  2. 【Qt学习】 设计视频播放器之界面美化

    目录 一:效果展示 二:源码分享 一:效果展示 开机动画效果 在开机动画后,跳转至登录界面 点击注册按钮,可进入注册界面 登录成功后 进入到视频播放器界面 [初始化默认显示image目录下的所有.pn ...

  3. Qt学习笔记,Qt程序架构设计要旨

    Qt学习笔记,Qt程序架构设计要旨 时间过得很快,转眼学习Qt已经有一个多月了,对Qt的学习也在不断的深入中.自己手下的code也很多了,不过不得不说,还有很多的部分没有接触过,比如网络编程,2D,3 ...

  4. QT学习 第一章:基本对话框--利用Qt Designer设计多个UI界面

    QT学习 第一章:基本对话框--利用Qt Designer设计多个UI界面 效果截图: 创建上文件夹Designers,使用Designer设计三个UI界面: First.ui Second.ui T ...

  5. 怎样学习计算机动漫与游戏设计6,计算机动漫与游戏制作专业系列教材·动画设计软件应用:Flash CS6(第3版)...

    <计算机动漫与游戏制作专业系列教材·动画设计软件应用:FlashCS6(第3版)>是计算机动漫与游戏制作专业系列教材,根据<中等职业学校计算机动漫与游戏制作专业教学标准>编写. ...

  6. QT入门学习之UI设计布局管理

    1. QT Designer 可视化UI设计及布局管理 创建一个Qt Widget Application项目demo2.在创建窗体时选择基类QDialog,生成的类命名为QWDialog,并选择生成 ...

  7. 【Qt学习】利用数据库单例完成 登录匹配 注册 功能实现

    目录 一:效果展示 二:源码分享 三:数据库查找操作 一:效果展示 注册成功,给出提示  登录成功,给出提示  二:源码分享 mysqlite.h .cpp #ifndef MYSQLITE_H #d ...

  8. 【Qt学习】 登录验证 注册 功能实现

    目录 一:效果展示 二:源码分享 一:效果展示 输入正确用户名密码后,弹出登录成功消息框,并跳转界面  用户名或密码 输入错误,给出错误提示框,需要重新输入用户名密码  注册成功,给出注册成功消息框  ...

  9. QT学习笔记(1)----- QT简介

    名字由来 在<C++ GUI Programming with Qt 4>里有这么一段介绍: A Brief Histroy of Qt: The letter 'Q' was chose ...

最新文章

  1. mysql 事务id_[转]MySQL 5.6 全局事务 ID(GTID)实现原理(一)
  2. Python 2.7 学习笔记 内置语句、函数、标准库
  3. 列举Python中常见的内置函数
  4. 算术基本定理(维基百科)
  5. Site24x7 为Teams提供可智能 DevOps
  6. Ubuntu 14.04 为 root 帐号开启 SSH 登录
  7. Elasticsearch查询之term/match解析
  8. 牛客寒假算法基础集训营4
  9. 0-5v转0-20ma和0-5v转4-20ma
  10. JD_Source Code for problem 1379
  11. 血腥!实况转播SQL注入全过程,让你知道危害有多大。
  12. 小米6通话音量补丁_手机通话声音小?只需打开这个开关,音量更大更清晰
  13. 7-10 幸运数17(10分)
  14. 使用Universal Image Loader- Image can't be decoded
  15. pdc-admin 学习心得
  16. 学习如何使用php创建一张空白的图片
  17. 图像转换 image translation系列(17)| 最新ICCV2021生成对抗GAN汇总梳理
  18. c# 海康威视 Winform播放mp4视频
  19. 非递归遍历二叉树实现和理解
  20. 最全的9款3D建模软件介绍

热门文章

  1. Mac中微信文件的存储路径(头像、视频、图片等)
  2. 【GNN】图解GNN: A gentle introduction(含视频)
  3. 如何判断安卓模拟器的型号(品牌)
  4. NX二次开发-UFUN重命名工程图UF_DRAW_rename_drawing
  5. 购买全光谱的灯对人体有什么伤害?推荐五款护眼台灯
  6. scrapy框架爬取王者荣耀皮肤
  7. [案例4-7]经理与员工工资案例
  8. 好记星不如烂笔头!就从今天开始吧~
  9. 超全UI样机图片素材网站整理
  10. 【文字版】津津有味:感染新冠后没食欲,那咱也得吃饭啊!