如何在qt中设置小部件的绝对位置

时间:2010-12-01 22:21:53

标签: qt widget

我正在使用QT开发丰富的UI应用程序。

  1. 我需要将小部件放在绝对位置
  2. 我应该可以将小部件放在background / foreground中以添加一些效果。
  3. 简单的例子是,我必须在进料罐内显示一个带有水位的锅炉。

    1. 取一个饲料罐图像并嵌入标签中。
    2. 将进度条放在进水管中心以显示水位。
    3. 现在,在这种情况下,进度条将位于前景中,标签位于背景中。

      此致

4 个答案:

答案 0 :(得分:33)

使用QWidget :: move()设置位置,QWidget :: resize()设置大小并重新实现父级的resizeEvent()处理程序,如果你需要在父级调整大小时重新定位小部件。

答案 1 :(得分:25)

您只需创建窗口小部件,指示其父QWidget然后显示它。

不要将其添加到父版面,否则您将无法根据需要移动它。

不要忘记指出其父级别,它将显示为独立小部件。

在这些情况下,您的窗口小部件将被视为QWidget的子窗口,但不会被视为父窗口布局的成员。所以它将是一个“浮动”的孩子,你必须在调整父级的QWidget时管理它的行为。

答案 2 :(得分:3)

除了 Patrice Bernassola Frank Osterfeld 的答案之外,堆叠顺序可能会引起关注。它对应于您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_()

答案 3 :(得分:0)

我是通过创建一个基于Qwidget的类在构造函数中放置它的位置

来实现的

例如: QPointer a =新的QWidget(0,posx,posy,width,height)

在这个Qwidgetclass的构造函数中添加这些integrers posx,posy,width,height然后再做 this.move(POSX,POSY); this.resize(宽度,高度);