開課吧-智能物聯網訓練營Day1-使用QT簡單的構建圖形程序分享與總結

開課吧-智能物聯網訓練營Day1-使用QT簡單的構建圖形程序分享與總結

Day1開發部分可以分爲兩個部分,一個是實現了背景圖;另一個是對自定義的view和scene做了封裝。
我沒看回放,嗯。主要是因爲懶。如有錯誤,敬請指正。

1. 環境介紹

Qt 5.14.2
windows 10 當然是最新的。

2. 實現背景圖

2.1 建立目錄結構

以下步驟會有所省略。總之QT操作比一般的IDE感覺還簡單一些。
建立一個Qt Widgets Application
在這裏插入圖片描述
避雷:不要把項目放到中文目錄下。否則會無法編譯。
這裏需要更改一下。類名改爲MainWidget。基類選擇QWidget。
注意:底下的框選取消掉
其實不取消也沒啥。。我當時就沒注意~
在這裏插入圖片描述
選擇運行平臺。隨便選,畢竟沒幾個人還在用32位系統吧?建議只選一個。我比較喜歡先進的東西,所以64。
在這裏插入圖片描述
至此,一個項目建好了。運行效果如下
在這裏插入圖片描述

下面開始整理目錄結構。
打開項目文件夾(你之前保存的地方)
建立src文件夾,把C++源文件和頭文件拖到src裏。
不要把pro和user文件拖進去了。
再把老師發的code下的代碼文件全部複製到src下。把images和audio複製到項目目錄(pvz)下。
最終的結果如下:
在這裏插入圖片描述
打開QT,會彈框,closeAll即可。
在這裏插入圖片描述
右鍵上圖箭頭指向處,添加現有文件,把src下的所有文件使用ctrl+a選中。加入到項目中。。
打開你的pvz.pro項目文件:
在這裏插入圖片描述
可以看到有些過時的信息。即不是src下的文件。刪了。結果如下:
在這裏插入圖片描述
下一步添加資源文件。
在上一步添加現有文件的選項(右鍵項目彈出)中,還有一個是Add new。
在這裏插入圖片描述
選中Qt。Qt Resource File。Choose
文件名填pvz。
在這裏插入圖片描述
右鍵上圖的文件。Add existing directory。把audio和images勾上。然後彈框,選Yes to all。
在這裏插入圖片描述

至此項目結構完畢。

2.2 加入一點點代碼加入背景圖

mainwidget.cpp的代碼如下:

#include "mainwidget.h"
//注意包含以下三個個頭文件。老師把後二個放在了mainwidget中了。無所謂。哪裏需要哪裏搬,反正不會重複包含的。
#include "ImageManager.h"
#include <QGraphicsView>
#include <QGraphicsPixmapItem>


MainWidget::MainWidget(QWidget *parent)
    : QWidget(parent)
{
		
       //建立gameView。注意傳入this指針。
       QGraphicsView *gameView = new QGraphicsView(this);

       QGraphicsScene *gameScene = new QGraphicsScene();
	   gameView->setScene(gameScene);
       QGraphicsPixmapItem *backgroundItem = new QGraphicsPixmapItem(gImageCache->load("interface/background1.jpg"));
       gameScene->addItem(backgroundItem);
}

MainWidget::~MainWidget()   
{
//可以把上面的析構了。不過老師沒提。小細節。。
}


注意包含QGraphicsPixmapItem!!
爲什麼要這麼加?這代碼啥意思?
View是窗口,Scene是遊戲界面?item是界面中的元素。
窗口一般是恆定的,界面和元素通常都會變化。嗯。總之我還沒來得及找博客學習。所以具體是不是這個邏輯還有待查明~。
然後ImageManager還需要在main.cpp初始化。

#include "mainwidget.h"

#include <QApplication>
#include "ImageManager.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //初始化代碼。
    InitImageManager();
    MainWidgt w;
    w.show();
    return a.exec();
}

看看源碼就挺好懂的。運行效果:
在這裏插入圖片描述
嗯。爲了增加寬高。可以在11行,gameView初始化後加gameView->setGeometry(0, 0, 800, 600);

至此實現部分沒了。下面是對gameView和gameScene的封裝~。我也沒聽多太仔細。方法是很簡單的。寫兩個子類代表我們自定義的view和scene。

3 封裝

點source啥的。add new。選擇c++\c++ class。
在這裏插入圖片描述
在這裏插入圖片描述
第一個GameView類。注意大小寫。包括進去Qwdiget和添加Q_OBJECT。基類設置爲QGraphicsView。
同樣的操作添加一個GameScene類。基類改爲QGraphicsScene。其他設置和上面一致。
注意導入頭文件。QT不夠智能。不會自動導入。不過可以右鍵出錯的地方,refactor。如果有include的選項,就選吧。挺方便的。
點開GameView的頭文件。給構造函數添加一個QWiget *parent=nullptr的參數。
在這裏插入圖片描述
源文件當然也得更改。注意源文件別把默認值複製過去了。然後使用初始化列表初始化父類。就醬。然後
在這裏插入圖片描述
然後加入到MainWidget中。剩下的步驟我比較自由發揮了。。
在這裏插入圖片描述
然後在cpp文件中實現。
在這裏插入圖片描述
這樣。在GameVIew的構造函數中就可以設置窗口的大小:
在這裏插入圖片描述
在這裏插入圖片描述
最終效果不變~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章