2010-12-01 14 views
17

QTを使用して豊富なUIアプリケーションを開発しています。Qtでウィジェットの絶対位置を設定するには

  1. 私はいくつかの効果を追加するために、バックグラウンド/フォアグラウンドでウィジェットを置くことができるはずの絶対位置
  2. でウィジェットを配置する必要があります。

単純な例として、給水タンクの内部に水位のあるボイラを設置する必要があります。

  1. フィードタンクイメージを取り、ラベルに埋め込みます。
  2. 水位を表示するために給水タンクの中央に進行バーを配置します。

この場合、進行状況バーはフォアグラウンドになり、ラベルはバックグラウンドになります。

よろしく、

答えて

25

あなたは、あなたのウィジェットを作成する必要があり、親QWidgetのを示しているし、それを表示します。

親のレイアウトに追加しないと、望む通りに移動できません。

親を示すことを忘れないでください。それ以外の場合は、独立したウィジェットとして表示されます。

これらの条件では、ウィジェットはQWidgetの子と見なされますが、親のレイアウトのメンバーではありません。だからそれは "浮動小児"になり、親のQWidgetのサイズを変更するときにその動作を管理する必要があります。

30

QWidget :: move()を使用して位置を設定し、QWidget :: resize()を使用してサイズを設定し、親のresizeEvent()ハンドラを再実装します。

+0

本当にそうです:) – mlvljr

3

さらにパトリスBernassolaフランク・オスタッフェルドによって解答への積層順は、関心のあるかもしれません。それはfindChildrenによって得られる子供の順序に対応し、順序を操作する方法はraise_(末尾のアンダースコア付き)、lowerまたはstackUnderを使用しています。

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のA =新たQWidgetの(0、POSX、POSY、幅、高さ)このQwidgetclassのコンストラクタで

これらintegrersは、POSY、幅、高さをPOSX、次に行う追加 this.move(POSX、POSY)。 this.resize(width、height);