嵌入式項目實戰——基于QT的視頻監控系統設計(一)
這個五一因為疫情,只能待在家里,想了想不如將我之前做的一個小的嵌入式的練習項目分享出來,供入門嵌入式的同學們學習。基于QT的視頻監控系統設計雖然是個小項目,但是涉及的嵌入式的知識點還是比較多的,比如多線程編程,網絡編程,QT界面設計,LCD顯示,如果有時間我也會介紹一下觸摸屏的使用,v4l2視頻解碼以及嵌入式開發板的基本操作。下面就開始我們五一假期的學習吧!!
第一天:QT的基本使用和UDP網絡編程
一、QT的基本使用——完成一個簡易的隨機選餐軟件設計
Qt Creator是一個用于Qt開發的輕量級跨平臺集成開發環境。Qt并不是一門編程語言。Qt是一門用標準C++編寫的跨平臺開發類庫,它對標準C++進行了拓展,引入了元對象系統,信號與槽,屬性等特性,使應用程序的開發變得更加高效。控件就是Qt提供的一種圖形類,在設計編程時,可以直接拖入設計界面(mainwindow.ui)進行編程。QT最關鍵的使用就是信號與槽的使用,槽即是一個函數,將要實現的功能、運算在槽函數里面定義清楚,之后通過圖形界面上的按鈕信號觸發槽函數,前提是要先將按鈕信號與槽函數綁定在一起。理解了這個就掌握了QT編程的基礎,再熟悉一點QT的基本語法之后,就能開發一個QT軟件啦。
下面就跟著我開始你的第一個QT界面軟件設計吧!!
首先安裝你的QT Creator軟件,下載地址我也貼在這里,省的你們去找了(
https://download.qt.io/archive/qt/5.9/5.9.1/)。下載之后跟著一步步安裝即可,我就不一步一步的安裝貼在上面了,畢竟我們的重點是使用撒。提示:安裝組件一定要選擇MinGW 5.3.0,如果你打算開發Android軟件的話,還需要勾選Android ARMv7。
安裝完成之后,打開桌面的圖標即可進入軟件界面。
之后進入下一步,命名你的項目名稱,選擇你要保存的路徑,然后點擊下一步。
接下來你要選擇你的編譯工具,它決定了你是創建一個桌面軟件還是Android軟件,這里我還沒有配置Android開發環境,所以只有一個選項,如果你想開發一個Android軟件,需要提前配置環境,可以留言,我會出一期這方面的教程。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(
img-2PPcYzMS-1651327201162)(https://cdn.jsdelivr.net/gh/zhangmeng19960901/blog-img/image-20220430164841314.png)]
之后一直點擊下一步,直到完成創建項目。出現下面這些就表明項目已經創建成功。你就可以在這個項目框架上大展拳腳啦。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(
img-5yuvREPc-1651327201163)(https://cdn.jsdelivr.net/gh/zhangmeng19960901/blog-img/image-20220430165014690.png)]
我們今天要設計的是一款隨機選餐軟件,我選擇這個奇怪的題目的原因是我對象每天吃飯的時候都發愁糾結不知道吃哪一個,她就說讓我給她做一個選餐軟件,免得她糾結,今天正好介紹QT,把這個軟件做一下。這是一個功能很簡單的軟件哦。跟著做下去你一定能夠實現的。
首先設計我們的界面。雙擊Froms->mainwindow.ui。
進入界面設計,我們首先點擊畫布空白區域,在右下角找到window Title,給軟件命名。
下面開始你的界面設計,我設計的這個界面只有兩個按鍵,兩個顯示條,成品就是下面這個展示的這個,你可以根據你的偏好設計屬于你的界面。按鍵:Push Button,顯示條:Line Edit。效果就是點擊按鍵《點擊這里開始選餐》,顯示條就會隨機顯示一個餐品名,如果不滿意,點擊按鍵《最后一次選擇機會》,會重新在顯示條隨機顯示一個餐品名。
下面就開始最關鍵的內容了,開始設計代碼,關聯信號與槽函數了,QT有兩種關聯方式。一種是直接鼠標左鍵點擊按鍵,選擇轉到槽,再選擇信號類型,點擊OK,就會自動生成槽函數。
在mainwindow.cpp中就會自動生成一個槽函數
void Mainwindow::on_pushButton_clicked(){
}
在mainwindow.h頭文件中也會自動聲明一個槽函數
private slots: void on_pushButton_clicked();
還有一種關聯按鍵信號和槽函數的方式,這種方式適合一次將多個信號關聯到一個槽函數
QPushButton *push_num_button[] = {
ui->pushButton_1,
ui->pushButton_2,}; //定義一組按鍵的數組 connect(push_num_button[i], SIGNAL(clicked(bool)), this, SLOT(槽函數));//將信號與槽函數綁定在一起。本句中的意思是將按鍵pushButton1與槽函數關聯,通過clicked即點擊觸發
本軟件因為是兩個按鍵,我就一個用系統自動生成,一個用connect函數來關聯。用connect()函數來關聯按鍵《最后一次選擇機會》的代碼如下。
在mainwindow.h中同樣需要聲明一個參函數。
private slots: void on_pushButton_clicked(); void on_pushButton_2_clicked();
現在我們需要在槽函數里面實現我們的功能了。我們需要實現什么功能呢,很簡單,就是當我們點擊《點擊這里開始選餐》按鍵(這里對應的信號與槽函數是pushButton,on_pushButton_clicked())時,會在顯示條line_Edit_2上顯示隨機出現的餐名,點擊《最后一次選擇機會》按鍵(這里對應的信號與槽函數時pushButton_2,on_pushButton_2_clicked())時,會在顯示條line_Edit_2上重新顯示一個隨機的餐名。現在功能已經明確了,那我們就開始動手實現吧!
要想實現隨機選餐功能,我們就需要生成一個隨機數
#include <ctime>//頭文件 qsrand(time(NULL)); int n = qrand() % 5;//生成一個5以內的隨機數
之后就變得很簡單啦,我們先定義一些字符串,然后比較生成的隨機數是什么,選擇相應的字符串顯示在顯示條中就可以啦!!
QString s1 = "五谷漁粉"; QString s2 = "涼面涼皮"; QString s3 = "關東煮"; QString s4 = "恰一碗素湯粉"; QString s5 = "辣椒雞絲刀削面";
這里我用的是最簡單的方式實現的,直接定義多個QString,也可以用字符串列表來實現,代碼更簡潔一些。這個就留給你們自己去探索吧。
然后我們在對應的槽函數里來處理按鍵按下之后的邏輯就可以了
void MainWindow::on_pushButton_clicked() { qsrand(time(NULL)); int n = qrand() % 5;//生成一個5以內的隨機數 QString tmp; if(n == 0){ tmp = s1; } else if(n == 1){ tmp = s2; } else if(n == 2){ tmp = s3; } else if(n == 3){ tmp = s4; } else if(n == 4){ tmp = s5; } ui->lineEdit_2->setText(tmp);//將字符串tmp顯示在line_Edit_2顯示條上 }
點擊左下角的編譯按鈕就可以生成軟件啦
到這里這個隨機選餐的軟件就完成啦,是不是很容易上手啊,下面是成品展示效果。
完整資料可進群免費領取。
嵌入式物聯網的學習之路非常漫長,不少人因為學習路線不對或者學習內容不夠專業而錯失高薪offer。不過別擔心,我為大家整理了一份150多G的學習資源,基本上涵蓋了嵌入式物聯網學習的所有內容。點擊下方鏈接,0元領取學習資源,讓你的學習之路更加順暢!記得點贊、關注、收藏、轉發哦!
點擊這里找小助理0元領取:掃碼進群領資料