用Qt Label 生成矩陣陣列
阿新 • • 發佈:2018-11-22
最近做的一個專案中需要用到視覺去檢測產品,產品呈矩陣式排列,客戶那邊需要檢測完一組產品後能夠將檢測結果以圖形化的方式顯示出來。
emmm,這個似乎不難,只需要有類似於陣列的東西就可以搞定,不過對於陣列來說它並不能存像QLabel這樣的型別,但是Qt它還是機制地提供了幾種容器類來幫我們儲存資料。Qt的容器類大概有以下幾類:
QList類(用得比較多的一種):QList、QLinkedList、QQueue
QVector類(將資料儲存在一段連續的記憶體空間裡):QVector、QStack
QMap類(字典式容器,將Key型別的值對映到 T型別的值上):QMap、QHash
在這裡也沒有什麼複雜的操作,用最常用的QList就行了
接下來要思考一下整個過程應該是怎樣的呢?
首先要定義這樣一個函式,可以接收矩陣的行列值和檢測每個單元的狀態值,分別定義為row,col和status。接著要把所有的Label都給new一遍(廢話,沒有新label哪來的新zg,手動滑稽),因為生產的時候是有順序的,每個單元都有它的序號,所以這些催巴兒得按大小個排好,然後給它們分配好狀態值,最後再根據生產順序進行矩陣排列。
廢話不多說,上程式碼
1 QList<QLabel *> m_lstLabel; 2 3 void Result::showResult(introw, int col, bool status) 4 { 5 int count = row*col; 6 for(int i = 0;i < count;i++) 7 { 8 QLabel *label = new QLabel; 9 label->setParent(this); 10 label->setGeometry(320,170,30,50); 11 if(status == true) 12 { 13 label->setStyleSheet("background-color:rgb(0,255,0)"); 14 } 15 else 16 { 17 label->setStyleSheet("background-color:rgb(255,0,0)"); 18 } 19 m_lstLabel.append(label); 20 } 21 22 for(int j = 0;j < col;j++) 23 { 24 for(int k = 0;k < row;k++) 25 { 26 m_lstLabel.at(k+row*j)->move(320-40*j,170-60*k); 27 } 28 } 29 }
這段程式碼還有一些需要修改的地方,比如status的值應該是一個數組的指標,這樣才能有多個值傳進來,還有矩陣的排列方式可有多種選擇
效果如下: