QT----Visual stdio翻金币案例,附源码

2024-01-06 16:20

本文主要是介绍QT----Visual stdio翻金币案例,附源码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

历经一个月,各种事情磕磕绊绊,终于结束了,自己还是太菜了
案例的文档写的教程已经很详细,这边主要是记录一些问题
github代码
gitee代码

1、图片无法加载

一开始加载首页图片和标题出不来,结果是paintEvent重写的字打错了,P大写了导致重写绘图事件失败

2、重写pushbutton

自定义pushbutton,新建一个QT class继承自Qwidget,修改继承自QPushButton

在这里插入图片描述

使用this->setStyleSheet("QPushButton{border:0px;}");将按钮设置为图片的形状,不加的只会是矩形。

3、让按钮拥有点击的效果

让开始按钮点击跳动可以采用一下的方式

connect(startBtn,&QPushButton::pressed,[=](){startBtn->move(this->width() * 0.5 - startBtn->width() * 0.5, this->height() * 0.5 + 15);
});
connect(startBtn, &QPushButton::released, [=]() {startBtn->move(this->width() * 0.5 - startBtn->width() * 0.5, this->height() * 0.5 + 10);
});

4、创建chooselevelsence报错没有默认的构造函数

创建chooselevelsence报错没有默认的构造函数,在实例化是把父类传入chooselevelsene* chooseScene = new chooselevelsene(this);

5、点击返回,返回主界面

使用自定义信号和槽来实现,void定义信号,emit发送

6、 一个循环写出一个矩阵

太妙了,使用%取余来获得x轴,用整除来得到y轴

for (int i = 0; i < 20; i++)
{MyPushButton* menubtn = new MyPushButton(":/res/LevelIcon.png");menubtn->setParent(this);menubtn->move(60+i%4 * 60,120+i/4 * 60);
}

7、进入关卡后点击返回无效果

查询原因是我把建立连接的代码放到了循环的外边,但是play的生成只会在点击关卡时,也就是根本没有建立连接,因此要把这个连接放到play的生成代码里边

//chooselevelsence.cpp
//监听每个按钮的事件
connect(menubtn,&MyPushButton::clicked,[=](){QString str = QString("您选择的是%1关").arg(i+1);qDebug() << str;//进入游戏场景this->hide();//隐藏选择关卡窗口play = new PlayScene(i+1);play->show();//监听返回选择关卡的信号connect(play, &PlayScene::levelSceneBack, [=]() {qDebug() << "返回选择关卡111";QTimer::singleShot(500, this, [=]() {delete play;//删除当前关卡play = NULL;this->show();//显示选择关卡界面});});
});

8 使用二维数组判断金币银币

使用map容器储存一个嵌套的vector,vector Qmap<int,Qvector<Qvector>>,相当于第一个是关卡好,后边是一个二维数组,使用二维数组储存congfig中关于每关的金币配置,值为1是金币,值为0是银币

9 翻金币核心

需要获得很多属性,xy坐标,是否翻面。定时器需要实例化new出来。

信号连接翻金币的代码只需要在构造函数中连接一次

重写鼠标点击事件来阻止金币旋转时的点击

void MyCoin::mousePressEvent(QMouseEvent* e)
{if (this->isAnimation){return;}else{QPushButton::mousePressEvent(e);}
}

周围金币反转延时QTimer::singleShot(300,[=](){}),使用Qtimer+lambda表达式,300是毫秒

10 判断游戏胜利无响应

排查发现是Qtimer,把胜利的代码放到了QTimer后边,周围金币反转是延时的,因此更新金币数组就会延迟,但是代码是直接执行的,就是执行完QTimer里边的翻金币立刻就执行胜利条件判断,所以不会响应。要把响应代码也放到Qtimer里边。

11 添加音效

引入QSound头文件报错,需要添加multimedia模块。项目–QT project settings–QTmodules,添加上multimedia。但是6.4已经把Qsound删了,我们使用QSoundEffect。
如遇报错请看这QT----Visual Studio添加QT Multimedia报错未找到

在这里插入图片描述

在这里插入图片描述

代码很简单

//播放胜利音效
QSoundEffect *winsound = new QSoundEffect(this);
//加载本地文件
winsound->setSource(QUrl::fromLocalFile(":/res/LevelWinSound.wav"));
winsound->play();

12 让每个场景的位置保持一致

进入一个新场景拖动后返回,会变到没有拖动前的位置,比较乱,让每个场景都互通位置

//进入选择关卡时
//设置choosesence场景的位置
chooseScene->setGeometry(this->geometry());//返回主界面时this->setGeometry(chooseScene->geometry());

13 打包发布和扩展

将debug修改为release,重新运行一边

在这里插入图片描述

找到exe文件,复制到一个单独的文件夹
在这里插入图片描述

打开qt的cmd,先cd到你新建的这个路径,然后运行`windeployqt CoinFilp.exe`,打包qt环境

在这里插入图片描述

使用hm nis edit打包程序

使用参考网址https://www.bilibili.com/read/cv16481371/

这篇关于QT----Visual stdio翻金币案例,附源码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/576897

相关文章

Golang操作DuckDB实战案例分享

《Golang操作DuckDB实战案例分享》DuckDB是一个嵌入式SQL数据库引擎,它与众所周知的SQLite非常相似,但它是为olap风格的工作负载设计的,DuckDB支持各种数据类型和SQL特性... 目录DuckDB的主要优点环境准备初始化表和数据查询单行或多行错误处理和事务完整代码最后总结Duck

基于Qt Qml实现时间轴组件

《基于QtQml实现时间轴组件》时间轴组件是现代用户界面中常见的元素,用于按时间顺序展示事件,本文主要为大家详细介绍了如何使用Qml实现一个简单的时间轴组件,需要的可以参考下... 目录写在前面效果图组件概述实现细节1. 组件结构2. 属性定义3. 数据模型4. 事件项的添加和排序5. 事件项的渲染如何使用

MySQL不使用子查询的原因及优化案例

《MySQL不使用子查询的原因及优化案例》对于mysql,不推荐使用子查询,效率太差,执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,本文给大家... 目录不推荐使用子查询和JOIN的原因解决方案优化案例案例1:查询所有有库存的商品信息案例2:使用EX

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

Java汇编源码如何查看环境搭建

《Java汇编源码如何查看环境搭建》:本文主要介绍如何在IntelliJIDEA开发环境中搭建字节码和汇编环境,以便更好地进行代码调优和JVM学习,首先,介绍了如何配置IntelliJIDEA以方... 目录一、简介二、在IDEA开发环境中搭建汇编环境2.1 在IDEA中搭建字节码查看环境2.1.1 搭建步

python与QT联合的详细步骤记录

《python与QT联合的详细步骤记录》:本文主要介绍python与QT联合的详细步骤,文章还展示了如何在Python中调用QT的.ui文件来实现GUI界面,并介绍了多窗口的应用,文中通过代码介绍... 目录一、文章简介二、安装pyqt5三、GUI页面设计四、python的使用python文件创建pytho

QT实现TCP客户端自动连接

《QT实现TCP客户端自动连接》这篇文章主要为大家详细介绍了QT中一个TCP客户端自动连接的测试模型,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录版本 1:没有取消按钮 测试效果测试代码版本 2:有取消按钮测试效果测试代码版本 1:没有取消按钮 测试效果缺陷:无法手动停

基于Qt实现系统主题感知功能

《基于Qt实现系统主题感知功能》在现代桌面应用程序开发中,系统主题感知是一项重要的功能,它使得应用程序能够根据用户的系统主题设置(如深色模式或浅色模式)自动调整其外观,Qt作为一个跨平台的C++图形用... 目录【正文开始】一、使用效果二、系统主题感知助手类(SystemThemeHelper)三、实现细节

Qt实现文件的压缩和解压缩操作

《Qt实现文件的压缩和解压缩操作》这篇文章主要为大家详细介绍了如何使用Qt库中的QZipReader和QZipWriter实现文件的压缩和解压缩功能,文中的示例代码简洁易懂,需要的可以参考一下... 目录一、实现方式二、具体步骤1、在.pro文件中添加模块gui-private2、通过QObject方式创建

Qt QWidget实现图片旋转动画

《QtQWidget实现图片旋转动画》这篇文章主要为大家详细介绍了如何使用了Qt和QWidget实现图片旋转动画效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、效果展示二、源码分享本例程通过QGraphicsView实现svg格式图片旋转。.hpjavascript