如何在qt中设置小部件的绝对位置
问题描述:
我正在使用QT开发丰富的UI应用程序。如何在qt中设置小部件的绝对位置
- 我需要绝对位置
- 来定位控件,我应该能够把背景/前景的小部件添加一些特效。
一个简单的例子是,我必须显示一个锅炉与饲料罐内的水位。
- 取一个饲料罐图像并嵌入标签。
- 将进度条放置在饲料罐*以显示水位。
现在在这种情况下,进度条将在前景和背景中的标签。
问候,
答
你只需要创建你的widget,表明其母公司的QWidget,然后显示它。
不要将其添加到父布局,否则您将无法将其移动到您想要的位置。
不要忘记指出它的父母,它将显示为独立的小部件。
在这些情况下,您的小部件将被视为QWidget的子项,但不是父级布局的成员。因此,它将是一个“浮动”的孩子,您必须在调整父母的QWidget时管理它的行为。
答
使用QWidget :: move()来设置位置,QWidget :: resize()设置大小并重新实现父级的resizeEvent()处理程序,如果您需要重新定位窗口小部件的父级调整大小。
答
除了通过帕特里斯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_()
答
我这样做是通过创建基于QWidget的类放在构造
前自己的立场: QPointer一个新= QWidget的(0,POSX,POSY,宽度,高度)在此Qwidgetclass的构造
添加这些integrers POSX,POSY,宽度,高度,然后执行 this.move(POSX,POSY); this.resize(width,height);
这就是它,确实:) – mlvljr 2013-05-25 20:35:00