1. 程式人生 > 其它 >Qt柵格佈局、ScrollArea和使用者選擇介面

Qt柵格佈局、ScrollArea和使用者選擇介面

使用者選擇介面

就我們在實際開發的時候可能需要面對這樣一個介面

做個demo試試看

其實我們可以分解一下這個介面

就是除了控制相關的內容,最主要的就是這個介面之上,有一個個動態的輸入的控制元件,上面都是學生的資訊、頭像等等資料,而且這個資料是動態變化的,也就是說主框架來條訊息,我這個exe裡的資料就要變動

那問題來了,這個部分怎麼實現呢?不可能是讓程式碼去一個個把空年間直接定位,這顯然不顯示,所以要用更自動化的方法-->柵格佈局和scrollArea

柵格佈局不用多說,就是可以柵格化擺放控制元件的一種佈局,是Qt特有的部分

而scrollArea則是一個特殊的控制元件,在裡面的內容如果超過當前scrollArea,則會令該控制元件自適應地生成滾動條

在實際開發中遇到了幾個問題:

1.實際操作中,我們該如何使用柵格佈局?

因為初始的時候我們在整個程式碼中是不帶元素的,所以不能提前在我們需要的地方提前佈置上柵格佈局,這也為我們後面的一個問題出現奠定了基礎。

由上,在實際的開發中柵格佈局只能通過程式碼實現。我們在類中宣告一個柵格佈局的指標:

注意c++中的指標一定要給空間,也就是後面的這個new QGridLayout()是必須的,否則可能會導致一些不必要的錯誤資訊出現。

因為我們的layout是給的指標,所以如果中途沒有單獨析構,那麼整個指標會存續整個軟體的生命週期中,所以我們實際開發中只需要對需要用到該佈局的部分進行->setLayout(QLayout *) 操作即可。

2.向layout中新增部件

首先我們要確定layout每個部件的寬度,也就是最小大小。不然在實際的開發過程中,layout特性很可能就會導致寬度不夠從而使得部件擠在一起,所以我們需要設定一下

這裡有個問題,就是每行每列的長度都只能單獨設定,兩個方法中的引數,一個是當前行、列,第二個才是具體的數值。而不是設定一個總的外推到所有的行列,所以在這裡我們也是每次更新資料的時候就修改一次即可。

新增部件的方法很簡單,就是向其中輸入命令,包含需要輸入的widget,第幾行,第幾列。這裡輸入的temp是我自定義的控制元件

3.給scrollArea綁定了gridlayout,並向其中輸入了控制元件之後,為什麼沒出現進度條?

因為scrollArea並不是一個獨立的控制元件,其包含兩部分,一部分是gridlayout本體,還有一個部分是scrollAreaWidgetContents,這是一個附屬的widget控制元件,真正的內容要輸入到scrollAreaWidgetContents中才可以自動地生成進度條,否則就不行

也就是說不論是我們的QGridLayout還是別的什麼,都應該是直接輸入到scrollAreaWidgetContents,這樣就不會出現之前的問題了,控制元件也可以正常運行了。

7-3修改

其實完全沒必要用gridlayout來進行這個修改,事實上有一個更簡單的方法,就是直接一個個的插入widget,然後對應的位置就直接給它指定了(注:我們這裡的窗體大小是要求不能變化的,如果要要求可以變化,則還是需要用到layout)

具體可以上程式碼

如果需要遍歷整個ScrollArea的話,則可以如下: