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/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/327233.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

rust 注释文档生成 cargo doc

rust的cargo文档生成 只需要在每个函数写清楚注释&#xff0c;就可以自动生成文档&#xff0c;很方便 即不用写文档&#xff0c;又可以快速查看&#xff0c;是开发rust的必备技能 rust安装和开发环境配置&#xff0c;可以参考&#xff1a;链接 1.写注释的方法 连续三个 \ 即…

【已解决】js定义对象属性是.如何访问

当变量没有length属性的时候&#xff0c;可能是个对象变量&#xff0c;当有键值对的时候就可能是个对象&#xff0c;读者都知道的是&#xff0c;用typeof(变量)可以查看属性&#xff0c;今天本文解决的问题是如果js定义对象中属性是"点"如何访问 问题再现 var a {…

【性能测试入门】详解客户端性能测试和服务器端性能测试!

一&#xff1a;客户端性能测试和服务器端性能测试 客户端性能测试和服务器端性能测试是两个不同但相关的概念: 客户端性能测试: - 测试应用程序客户端(如Web浏览器、移动应用等)的性能,例如加载时间,响应时间等。 - 测试在不同系统配置(CPU、内存、网络等)下客户端的运行性…

【HarmonyOS】装饰器下的状态管理与页面路由跳转实现

从今天开始&#xff0c;博主将开设一门新的专栏用来讲解市面上比较热门的技术 “鸿蒙开发”&#xff0c;对于刚接触这项技术的小伙伴在学习鸿蒙开发之前&#xff0c;有必要先了解一下鸿蒙&#xff0c;从你的角度来讲&#xff0c;你认为什么是鸿蒙呢&#xff1f;它出现的意义又是…

Python中的cls语法

在Python中&#xff0c;cls 是一个用于指代类本身的约定性名称&#xff0c;通常用作类方法&#xff08;class method&#xff09;中的第一个参数。cls 类似于 self&#xff0c;它是对类的引用&#xff0c;而不是对实例的引用。cls 通常在类方法中用于访问类级别的属性和方法。举…

计算机中的数据运算

放上计算机中的数据的表示方法 计算机中的数据表示方法-CSDN博客 补码的运算&#xff1a; 连同符号位一起相加&#xff0c;符号位产生的进位自然丢掉&#xff0c;这里要特别注意机器数的位数&#xff0c;计算数的位数决定了可以存放的数据的大小&#xff0c;加减产生的数据的…

面试官:说说接口和抽象类有什么区别

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一波电子书籍资料&#xff0c;包含《Effective Java中文版 第2版》《深入JAVA虚拟机》&#xff0c;《重构改善既有代码设计》&#xff0c;《MySQL高性能-第3版》&…

Kafka消息阻塞:拯救面试的八大终极解决方案!

大家好&#xff0c;我是小米&#xff0c;一个对技术充满热情的90后程序员。最近在准备社招面试的过程中&#xff0c;遇到了一个超级有挑战性的问题&#xff1a;“Kafka消息阻塞怎么解决&#xff1f;”今天&#xff0c;我就来和大家一起深入剖析这个问题&#xff0c;分享我在解决…

Harbor配置同步规则删除不掉

【问题原因】 harbor上主从两个仓库&#xff0c;配置同步规则时&#xff0c;定时任务配置太频繁&#xff0c;导致规则修改&#xff0c;删除都失败。 【问题现象】 点击修改后保存&#xff0c;页面报internal server error的错。 【问题排查】 docker ps | grep harbor 查看…

C#,入门教程(08)——基本数据类型及使用的基础知识

上一篇&#xff1a; C#&#xff0c;入门教程(07)——软件项目的源文件与目录结构https://blog.csdn.net/beijinghorn/article/details/124139947 数据类型用于指定数据体&#xff08;DataEntity&#xff0c;包括但不限于类或结构体的属性、变量、常量、函数返回值&#xff09;…

通信原理期末复习——计算大题(一)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;V…

leetcode经典【双指针】例题

删除有序数组中的重复项&#xff1a; https://leetcode.cn/problems/remove-duplicates-from-sorted-array/ 解题思路&#xff1a; 首先注意数组是有序的&#xff0c;那么重复的元素一定会相邻。 注: 要求删除重复元素&#xff0c;实际上就是将不重复的元素移到数组的左侧。 考…