Qt中各個widget前後位置的設定

2021-05-22 11:35:14 字數 1424 閱讀 5180

這兩天在總結一些以往project中遇到的問題,正好別組有同事問我關於qt中各個widget視窗的前後位置是如何定義的,這裡就總結一下:

在qt中,所有問題都要一分為二,討論兩種不同的情況:乙個是最常用的qwidget體系,而另外乙個則是qgraphicswidget體系。

①:在常用的qwidget體系中,設定前後位置是主要是用raise(),understack(),hide()函式。

理論為:在qt中每個widget視窗都維持著自己的乙個建立棧(widget's stack.),棧裡邊存放的是該視窗所有子widget視窗的識別符號(代表其各個子widget)。當建立乙個子widget後,系統便會將將代表其的識別符號壓入其父widget的建立棧中。而這各個子widget顯示的前後順序擇是:棧頂的在最上邊,棧底的最下邊。所以:後壓入棧的顯示在上邊,先入棧的在下邊。 由此可知:後建立的子widget會顯示出來!

那麼:當我們建立了多個有重疊的子widget之後,最後建立的那個肯定是我們看到的那個。

那如何改變這種先後順序呢?對於乙個子widget,我們可以直接呼叫raise()函式來讓其公升到棧頂,從而顯示在最上邊使用者面前,而不至於被遮擋;  當然我們也可以用understack()來讓其處於某個子widget下邊,從而來指定前後順序。

按照經驗來看,其實只要使用raise()函式就足夠了,需要顯示誰,就直接讓其呼叫raise()即可!!

②:對於qgraphicswidget體系而言:

其內部放的是各個item,對於他們而言:我們是直接可以用setzvalue()來設定各個item之間的前後位置。

當然:還有一種混合情況,亦即:乙個qgraphicsscene,其中既可以 用additem()來加入item;也可以addwidget()來加入qwidget物件。 此時對於這種既有item,又有qwidget的情況,該如何定義彼此之間的前後位置呢?

其實當我們用addwidget()來想scene中加入qwidget時:該函式是有乙個返回值的,為qgraphicsproxywidget*型別指標。亦即:當我們呼叫addwidget()這個函式時,其一共做了兩步操作:

一:系統首先把你原先的qwidget物件給轉換成「item物件」。

二:而後再將這個轉換後生成的item放到scene場景中。

但是其第一步操作中轉換生成的「item物件」和真正的item物件還是不一樣的,轉換生成的僅僅是真正item的一種**形式!即:生成了乙個qgraphicsproxywidget型別的**item !!  但是對於這個**item,我們也可以用setzvalue()來設定其前後位置啦!

總結起來就是說:混合情況下,我們用addwidget()向乙個scene場景中加入普通qwidget時,會返回乙個qgraphicsproxywidget*型別指標(其代表真正放入這個scene中的**item),我們完全可以用它來呼叫setzvalue()來設定前後位置,這樣其便和普通item的前後位置設定方式相統一一致了!!

Qt中各個widget前後位置的設定

關於qt中各個widget視窗的前後位置是如何定義的 在qt中,所有問題都要一分為二,討論兩種不同的情況 乙個是最常用的qwidget體系,而另外乙個則是qgraphicswidget體系。在常用的qwidget體系中,設定前後位置是主要是用raise understack hide 函式。理論為 ...

Qt保持Widget比例

進行ui設計時,若碰到需要保持縮放過程中widget水平與豎直方向的比例的情況時,本文提供了乙個基本的解決方法,將需要保持比例的widget作為乙個容器widget中的乙個子部件,通過重寫容器widget的resizeevent事件實現比例的保持!include include include cl...

Qt中Widget如何保證居中對齊

qwidget widget new qwidget widget.setalignment qt aligncenter或者qt alignhcenter 在layout中新增widget時,也可以對該widget進行居中顯示設定。vlayout.addwidget widget,1,qt ali...