2010-12-01 139 views
17

我正在使用QT開發豐富的UI應用程序。如何在qt中設置小部件的絕對位置

  1. 我需要絕對位置
  2. 來定位控件,我應該能夠把背景/前景的小部件添加一些特效。

一個簡單的例子是,我必須顯示一個鍋爐與飼料罐內的水位。

  1. 取一個飼料罐圖像並嵌入標籤。
  2. 將進度條放置在飼料罐中央以顯示水位。

現在在這種情況下,進度條將在前景和背景中的標籤。

問候,

回答

25

你只需要創建你的widget,表明其母公司的QWidget,然後顯示它。

不要將其添加到父佈局,否則您將無法將其移動到您想要的位置。

不要忘記指出它的父母,它將顯示爲獨立的小部件。

在這些情況下,您的小部件將被視爲QWidget的子項,但不是父級佈局的成員。因此,它將是一個「浮動」的孩子,您必須在調整父母的QWidget時管理它的行爲。

30

使用QWidget :: move()來設置位置,QWidget :: resize()設置大小並重新實現父級的resizeEvent()處理程序,如果您需要重新定位窗口小部件的父級調整大小。

+0

這就是它,確實:) – mlvljr 2013-05-25 20:35:00

3

除了通過帕特里斯Bernassola弗蘭克奧斯特費爾德堆疊順序可能會感興趣的答案。它對應於您通過findChildren獲得的子女的順序,並且操縱訂單的方式使用raise_(尾隨下劃線),lowerstackUnder

一個例子變化與每個使用PySide 3種可用功能的順序是在這裏:

from PySide import QtGui 

app = QtGui.QApplication([]) 

window = QtGui.QWidget() 
window.resize(400, 300) 
window.show() 

rA = QtGui.QLabel() 
rA.name='square' 
rA.resize(100, 100) 
rA.setStyleSheet('background-color:red;') 
rA.setParent(window) 
rA.show() 

text = QtGui.QLabel('text') 
text.name='text' 
text.setParent(window) 
text.show() 

# text was added later than rA: initial order is square under text 

rA.raise_() 
rA.lower() 
text.stackUnder(rA) 

children = window.findChildren(QtGui.QWidget) 
for child in children: 
    print(child.name) 

app.exec_() 
0

我這樣做是通過創建基於QWidget的類放在構造

前自己的立場: QPointer一個新= QWidget的(0,POSX,POSY,寬度,高度)在此Qwidgetclass的構造

添加這些integrers POSX,POSY,寬度,高度,然後執行 this.move(POSX,POSY); this.resize(width,height);