热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

QT界面开发游戏案例

一、设计登录主页面0.添加资源文件将所需要的图片、音频添加到资源文件中1.设置窗口(标题、图标、背景)设置窗口属性1.添加资源文件2.指定窗口大

一、设计登录主页面


0.添加资源文件

将所需要的图片、音频添加到资源文件中


1.设置窗口(标题、图标、背景)

设置窗口属性

//1.添加资源文件//2.指定窗口大小--固定大小this->setFixedSize(900,600);//3.设置窗口左上角图标this->setWindowIcon(QIcon(":/resour/04.png"));//4.设置窗口标题this->setWindowTitle("姬霓太美");//5.加载背景图片--重写画图事件函数//详见绘图事件函数中//6.在ui文件中添加工具栏,并将其他无用部分删除

加载背景图片和游戏名称图片

//重写绘图函数--声明作用域,不然会被编译为全局函数
//头文件--
void newload::paintEvent(QPaintEvent*)
{//1.创建一个画家对象QPainter painter1(this); //指定父亲//2.创建pixmap类型的对象,用于加载背景图片QPixmap pixmap1;//3.利用pixmap1加载背景图片pixmap1.load(":/resour/01.jpg");//4.利用画家将pixmap1加载的背景图画出来//注意drawpixmap的参数painter1.drawPixmap(0,0,this->width(),this->height(),pixmap1);//5.利用pixmap加载《游戏名》图片pixmap1.load(":/resour/06.png"); //URL:互联网上标准资源的唯一地址//6.改变图片大小//scaled:缩放、规模pixmap1=pixmap1.scaled(pixmap1.width()*0.4,pixmap1.height()*0.4);//7.将 游戏名 的图片画出来painter1.drawPixmap(20,33,pixmap1);}

2.自定义按钮类

目的是:按下按钮时,有一个弹动的效果

1.自定义按钮类:mybutton,继承于QPushButton,具有父类的一些属性,也有自己的特有属性

2.自己编写构造函数,第一个参数是未点击按钮图片时的路径,第二个是点击按钮时图片的路径

3.有两个成员函数保存图片路径,加载函数时一些特殊的设定

1.重写mybutton类构造函数

头文件:

//重写构造函数//explicit mybutton(QWidget *parent = nullptr);//注意第二个参数为默认参数,实现和声明只需要有一个说明即可mybutton(QString normalimg,QString pressimg = "");//两个成员函数保存图片路径QString normalimgpath;QString pressimgpath;

cpp文件:

mybutton::mybutton(QString normalimg, QString pressimg)
{//创建一个Pixmap,更好的显示图片QPixmap pixmap1;//保存输入的路径normalimgpath = normalimg;pressimgpath = pressimg;//加载默认显示的图片int pixnum = pixmap1.load(normalimgpath); //函数返回值为bool//如果加载失败返回false,提示加载失败if(!pixnum){//此时的this,指的是mybuttonQString pixstr = QString("%1 图片加载失败").arg(this->normalimgpath);qDebug()<

setFixedSize(pixmap1.width(),pixmap1.height());//设置不规则图片格式//边界--0px---透明背景this->setStyleSheet("QPushButton{border:0px;}");//设置图片:给按钮添加图片this->setIcon(QIcon(":/resour/05.png"));//设置图片大小this->setIconSize(QSize(pixmap1.width(),pixmap1.height()));//利用画家画出来//在主窗口}

2.主窗口创建 开始游戏 按钮

暂时还没有弹动的功能

//7.创建一个自定义类型的按钮mybutton* mybutton1 = new mybutton(":/resour/05.png");//将按钮添加到对象树上mybutton1->setParent(this);//移动自定义按钮的位置mybutton1->move(this->width()*0.5-mybutton1->width()*0.5,this->height()*0.7);

3.开始按钮 弹跳效果

3.1按压动画

需要添加动画类------

//按压动画
void mybutton::zoom1()
{//创建一个动画类指针对象,第一个参数是目标控件,第二个参数是动画方式geometry:几何QPropertyAnimation* animation1 = new QPropertyAnimation(this,"geometry");//创建动画的起始位置//函数参数:起始位置x值、y值、长、宽animation1->setStartValue(QRect(this->x(),this->y(),this->width(),this->height()));//创建动画结束的位置//结束位置x值、y值、长、宽animation1->setEndValue(QRect(this->x(),this->y()+10,this->width(),this->height()));//设置动画时间animation1->setDuration(200);//设置动画轨迹//easing:减轻、纾解//curve:曲线、弯线//variant:变量、变化、变种 bounce:弹性、弹跳、反弹animation1->setEasingCurve(QEasingCurve::OutBounce);//启动动画animation1->start();
}

3.2上弹动画

与按下动画类似

3.3组合

采用信号和槽的机制,使用 lambda 表达式的技术来实现

//测试一下connect(mybutton1,&QPushButton::clicked,[=](){//调试一下qDebug()<<"点击了按钮";//property:所有物、性能、财产//animation:活力、生气、动画片、动画制作//开始按钮执行动画//函数由自定义按钮提供//按下的动画mybutton1->zoom1();//弹起动画mybutton1->zoom2();//有一个小bug,快速连续按按钮,按钮就掉下去了});

二、切换游戏界面


2.1最核心的逻辑

1.创建一个新的类

2.在当前类里存放一个新类的指针

3.触发事件,隐藏该类,显示新类

//需要有一个延时的效果QTimer::singleShot(500,this,[=](){//进入新页面//该类隐藏this->hide();//创建一个新类newpage* newpage1 = new newpage;//显示新类newpage1->show();});

2.2新类的设计问题

大部分的设计与登录界面相类似

这里采用代码的方式来生成工具栏

//代码创建菜单栏QMenuBar* bar1 = new QMenuBar();//将菜单栏添加到对象树中this->setMenuBar(bar1);//创建具体菜单QMenu* menu1 = bar1->addMenu("开始");//创建菜单子项QAction* quit1 = menu1->addAction("退出游戏");//退出游戏connect(quit1,&QAction::triggered,this,[=](){//关闭窗口this->close();});


推荐阅读
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 有没有一种方法可以在不继承UIAlertController的子类或不涉及UIAlertActions的情况下 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 如何搭建Java开发环境并开发WinCE项目
    本文介绍了如何搭建Java开发环境并开发WinCE项目,包括搭建开发环境的步骤和获取SDK的几种方式。同时还解答了一些关于WinCE开发的常见问题。通过阅读本文,您将了解如何使用Java进行嵌入式开发,并能够顺利开发WinCE应用程序。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • C#多线程解决界面卡死问题的完美解决方案
    当界面需要在程序运行中不断更新数据时,使用多线程可以解决界面卡死的问题。一个主线程创建界面,使用一个子线程执行程序并更新主界面,可以避免卡死现象。本文分享了一个例子,供大家参考。 ... [详细]
  • vb.net不用多线程如何同时运行两个过程?不用多线程?即使用多线程,也不会是“同时”执行,题主只要略懂一些计算机编译原理就能明白了。不用多线程更不可能让两个过程同步执行了。不过可 ... [详细]
  • 摘录自Understandingplaceholderselectors.extendextend让你能够在多个选择器中通过继承的方式共享一段样式:.icon{transition ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
author-avatar
手机用户2502880437
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有