Qt——組件位置隨窗口變化

當咱們用Qt Designer設計界面時,有時會面臨這樣一個問題:須要在窗口指定位置放置組件,而且當窗口位置大小改變時,該組件相對其父對象的位置是不變的,以下面兩幅圖所示函數

,首先看上面這幅圖,注意button的位置,咱們想讓button一直停留在該位置,咱們剛開始作的多是在designer中將button直接拖到該位置,編譯運行後正是咱們想要的結果,可是當咱們拖動窗口,使窗口尺寸變化後,發現button位置改變了,以下面那副圖所示。發生這種狀況的緣由很簡單,直接拖放button到界面中,不加任何佈局狀況下,button的位置是相對於整個桌面不變的,而當窗口背景圖變化時,二者天然而然的就不匹配了。佈局

  解決這種問題的方法是將button加入到佈局當中,咱們知道佈局共有3種方式:水平佈局、垂直佈局、棋盤佈局;這三種佈局方式都可以使組件在必定程度上保持其相對於父窗口的位置不變,但對於水平和垂直相對位置都要固定的問題來講,用棋盤佈局無疑是相對方便的,棋盤佈局即爲QGridLayout,添加組件的代碼大體以下:spa

    QGridLayout *layout=new QGridLayout;
    layout->addWidget(button1,0,0,5,10);//這裏的參數是隨意填寫
   其中addwidget函數爲void QGridLayout::addWidget (QWidget * widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt::Alignment alignment = 0 )
QGridLayout網上有許多資料,這裏就很少介紹了。只說一下
addwidget函數的參數,fromRow爲組件起始行,fromColumn爲組件起始列,rowSpan爲組件的所佔行數,columnSpan爲組件所佔列數,alignment則爲組件的對齊方式。
可經過調整addwidget中組件起始行列、所佔行列來控制組件在整個窗口中所佔的相對大小以及位置,而且可以實現組件的相互重疊。可是這種方式和咱們想要的還不是徹底相同,由於這樣也不能
徹底保證組件和背景圖的某個位置徹底對應,而且窗口布局中某個只存在一個組件時,該組件會佔滿窗口,這時就要用到按比例設定佈局的方法,在designer中,經過改變佈局對象中的layoutRowStretch和LayoutColumnStretch屬性來設置,其中layoutRowStretch中「0」的個數對應共有幾行組件,layoutColumnStretch中「0」的個數對應共有幾列組件,「0」爲最初的初始值,經過更改該值(百分比),控制不一樣位置的組件在整個窗口中的大小與位置。
  在本文中,爲了將button控制在指定位置,咱們須要在button周邊放置4個spacer,水平、垂直方向各兩個,這樣就能夠將窗口分爲3行3列,而後經過以前所說的layoutRowStretch和
layoutCColumnStretch中對應值的大小,改變button的位置和大小。
  這種方法若是用代碼實現,示例:
        gridLayout->setRowStretch(0, 49);
        gridLayout->setRowStretch(1, 4);
        gridLayout->setRowStretch(2, 32);
        gridLayout->setColumnStretch(0, 38);
        gridLayout->setColumnStretch(1, 21);
        gridLayout->setColumnStretch(2, 8);
        gridLayout->setColumnStretch(3, 32);
setRowStretch()與setColumnStretch的使用就很少說了,manual中一看就會了。

相關文章
相關標籤/搜索