web-dev-qa-db-ja.com

Qtでウィジェットの絶対位置を設定する方法

QTを使用してリッチUIアプリケーションを開発しています。

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

簡単な例としては、給水タンク内の水位をボイラーに表示する必要があります。

  1. 供給タンクの画像を取り、ラベルに埋め込みます。
  2. 進行状況バーをフィードタンクの中央に配置して、水位を表示します。

この場合、進行状況バーは前景に、ラベルは背景に表示されます。

よろしく、

21
chai

ウィジェットを作成し、その親QWidgetを指定して、表示するだけです。

親レイアウトに追加しないでください。追加すると、希望どおりに移動できなくなります。

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

これらの条件では、ウィジェットはQWidgetの子と見なされますが、親のレイアウトのメンバーとは見なされません。したがって、これは「フローティング」子になるため、親のQWidgetのサイズを変更するときの動作を管理する必要があります。

29

QWidget :: move()を使用して位置を設定し、QWidget :: resize()を使用してサイズを設定し、親のサイズが変更されたときにウィジェットを再配置する必要がある場合は、親のresizeEvent()ハンドラーを再実装します。

36
Frank Osterfeld

Patrice BernassolaおよびFrank Osterfeldによる回答に加えて、スタックの順序が興味深いかもしれません。これは、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_()
3
Trilarion

Qwidgetに基づいてクラスを作成し、コンストラクターにその位置を配置することでそれを行います

例:QPointer a =新しいQWidget(0、posx、posy、幅、高さ)

このQwidgetクラスのコンストラクターで、これらのインテグレーターposx、posy、width、heightを追加して、this.move(posx、posy);を実行します。 this.resize(width、height);

0