第四弹:Github上的C++开源项目精选推荐

发表时间: 2020-11-05 23:51

KuGouDemo

https://github.com/what951006/KuGouDemo

用Qt实现的高仿酷狗音乐。个人觉得比下面推荐的QtMusic质量要高,相应的难度也要大一些。其实这个项目我早就发现了,而且之前还在里面提取了左侧那个自定义的tab窗口控件用在了我自己的项目中。

QtMusic

https://github.com/AndyQsmart/QtMusic-1.0

Qt QtMusic是基于Qt C ++实现的,编译后支持跨平台运行编写的音乐播放器。包含歌曲播放,歌单管理,歌词显示以及网络歌曲和换肤等功能,界面友好。

  • 歌曲播放使用Qt自带的媒体库实现了歌曲的播放,支持mp3,wma等音乐格式。
  • 歌单管理使用Qt自带的图形库实现了歌单管理的界面,重写了一些事件函数,实现了新建歌单,拖拽歌曲,歌曲高亮等功能。使用Qt封装的SQLite数据库,实现了歌曲,歌单的存档。
  • 歌词显示通过手写字符串匹配解析了lrc格式的歌词文件,然后通过二分查找实现了显示某时刻的歌词。
  • 网络歌曲利用网易音乐API,通过post和get方法获得歌曲,并使用QMediaPlayer直接播放网络歌曲。

下面是我编译以后试用的动态图,但是我发现不能播放歌曲,可能是长时间没人维护了,网易云的API版本太低的问题,我也没有详细的定位,但是实现方法和思路还是很有借鉴意义的。

MapGraphics

https://github.com/raptorswing/MapGraphics

用Qt编写的基于图块的“草绘地图”库。它的目的是使C ++ / Qt开发人员能够轻松地向其应用程序添加漂亮的交互式地图。

Magic-Tower-Qt

https://github.com/Armour/Magic-Tower-Qt

一个用Qt实现的打怪、升级、爬塔的小游戏,是男人就上20层。

  • GUI:主要使用QGraphicsview。
  • 数据库:连接到本地sqlite数据库。
  • 作弊:您可以在“作弊”中选择作弊选项!菜单,然后随心所欲。XD(GodMode =>与怪物战斗不会降低您的HP,但会增加它!)
  • 性别:不同的性别具有不同的基本属性。
  • 商店:您可以在此处购买诸如hp,攻击,各种钥匙之类的东西。
  • 书籍:您可以抬起头来,在这层楼上更多地了解怪物,“预期的损坏”非常有帮助。
  • 错过+暴击:战斗中会出现一些随机的错过或致命伤害,因此没有绝对的最佳结果。
  • BGM:使用qmediaplayer(尚未完全完成,因此我仅使用示例BGM)。
  • NPC:他们会给你一些建议。
  • 升级:杀死足够的怪物,您将升级,所以要勇敢!
  • 帮助:游戏开始后,您可以按“ h”键寻求帮助。
  • 不同的结尾:有三个不同的结尾,希望您能找到一个不错的:)

QtSnake

使用C++/QT图形视图框架开发的贪吃蛇游戏,类似于之前手游上挺火的贪吃蛇大作战。

QMarkdownTextEdit

https://github.com/pbek/qmarkdowntextedit

QMarkdownTextEdit是一个C++的Qt QPlainTextEdit小部件,支持Markdown高亮和其他一些功能。

  • Markdown突出显示
  • 代码语法高亮
  • 点击链接 Ctrl + Click
  • 与Tab和一起缩进Shift + Tab
  • 与重复的文字 Ctrl + Alt + Down
  • 用搜索文本 Ctrl + F使用Up和在搜索结果之间跳转Down使用关闭搜索字段 Escape
  • 用替换文本 Ctrl + R您也可以用正则表达式或整个单词替换文本
  • 非常快
  • 以及更多...

Madplotlib

https://github.com/madplotlib/madplotlib

Qt图表的c++包装器,外观像matplotlib,但不是。

Madplotlib是一个c++头文件库,提供简单的2D绘图功能,类似于Python的matplotlib。Madplotlib在背后使用Qt图表来呈现外观很酷的图,这些图很容易在Eigen的帮助下创建。

使用时,确保使用Qt 5.7或更高版本,并且已正确安装Eigen3.x。之后,只需将Madplotlib.h添加到您的项目中,用法如下:

Eigen::ArrayXf a = Eigen::ArrayXf::LinSpaced(20, 0, 2000);Eigen::ArrayXf b = Eigen::ArrayXf::LinSpaced(20, 0, 100);Eigen::ArrayXf c = Eigen::ArrayXf::Zero(20);b = b * b;c = 1000;Madplotlib plt;plt.title("Test 5: Linear vs Exponential vs Flat");plt.ylabel("Y Values");plt.xlabel("X Values");plt.plot(a, QString("label=Linear"));plt.plot(b, QString("label=Exponential"));plt.plot(c, QString("label=Flat"));plt.legend("loc=center right");plt.show();

效果图: