Github上優秀開源C++項目推薦第四彈

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添加到您的項目中,用法如下:

<code>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();/<code>

效果圖: