Qt中各個widget先後位置的設置

關於Qt中各個widget窗口的先後位置是如何定義的ide

在Qt中,全部問題都要一分爲二,討論兩種不一樣的狀況:一個是最經常使用的QWidget體系,而另一個則是QGraphicsWidget體系。函數

      ①:在經常使用的QWidget體系中,設置先後位置是主要是用raise(),underStack(),hide()函數。.net

      理論爲:在Qt中每一個widget窗口都維持着本身的一個建立棧(widget's stack.),棧裏邊存放的是該窗口全部子widget窗口的標識符(表明其各個子widget)。當建立一個子widget後,系統便會將將表明其的標識符壓入其父widget的建立棧中。而這各個子widget顯示的先後順序擇是:棧頂的在最上邊,棧底的最下邊。因此:後壓入棧的顯示在上邊,先入棧的在下邊。 由此可知:後建立的子widget會顯示出來!代理

那麼:當咱們建立了多個有重疊的子widget以後,最後建立的那個確定是咱們看到的那個。指針

       那如何改變這種前後順序呢?對於一個子widget,咱們能夠直接調用raise()函數來讓其升到棧頂,從而顯示在最上邊用戶面前,而不至於被遮擋;  固然咱們也能夠用underStack()來讓其處於某個子widget下邊,從而來指定先後順序。對象

      按照經驗來看,其實只要使用raise()函數就足夠了,須要顯示誰,就直接讓其調用raise()便可!!blog

      ②:對於QGraphicsWidget體系而言:get

           其內部放的是各個item,對於他們而言:咱們是直接能夠用setZValue()來設置各個item之間的先後位置。博客

固然:還有一種混合狀況,亦即:一個QGraphicsScene,其中既能夠 用addItem()來加入item;也能夠addWidget()來加入QWidget對象。 此時對於這種既有item,又有Qwidget的狀況,該如何定義彼此之間的先後位置呢?it

     其實當咱們用addWidget()來想scene中加入QWidget時:該函數是有一個返回值的,爲QGraphicsProxyWidget*類型指針。亦即:當咱們調用addWidget()這個函數時,其一共作了兩步操做:

                                 一:系統首先把你原先的QWidget對象給轉換成「item對象」。

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

      可是其第一步操做中轉換生成的「item對象」和真正的item對象仍是不同的,轉換生成的僅僅是真正item的一種代理形式!即:生成了一個QGraphicsProxyWidget類型的代理item !!  可是對於這個代理item,咱們也能夠用setZValue()來設置其先後位置啦!

      總結起來就是說:混合狀況下,咱們用addWidget()向一個scene場景中加入普通QWidget時,會返回一個QGraphicsProxyWidget*類型指針(其表明真正放入這個scene中的代理item),咱們徹底能夠用它來調用setZValue()來設置先後位置,這樣其便和普通Item的先後位置設置方式相統一一致了!!


本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/NRC_DouNingBo/archive/2010/05/08/5568763.aspx

相關文章
相關標籤/搜索