Подтвердить что ты не робот

Как установить абсолютную позицию виджетов в qt

Я использую QT для разработки богатого пользовательского интерфейса.

  • Мне нужно позиционировать виджеты в абсолютных позициях
  • Я должен уметь размещать виджет в фоновом режиме/переднем плане, чтобы добавить несколько эффектов.

Простым примером может быть, я должен показать котел с уровнем воды внутри подающего бака.

  • Возьмите изображение загрузочного резервуара и вставьте его в ярлык.
  • Поместите индикатор выполнения в центр подающего канала, чтобы отобразить уровень воды.

Теперь в этом случае индикатор выполнения будет на переднем плане и ярлык в фоновом режиме.

Привет,

4b9b3361

Ответ 1

Вам просто нужно создать свой виджет, указать его родительский QWidget, а затем отобразить его.

Не добавляйте его в родительский макет, иначе вы не сможете его перемещать, как хотите.

Не забудьте указать его родительский элемент, он будет отображаться как независимый виджет.

В этих условиях ваш виджет будет считаться дочерним элементом QWidget, но не членом родительского макета. Таким образом, это будет "плавающий" ребенок, и вы должны управлять им при изменении размера родительского QWidget.

Ответ 2

Используйте QWidget:: move(), чтобы установить позицию, QWidget:: resize(), чтобы установить размер и переопределить родительский обработчик resizeEvent(), если вам нужно переставить виджеты, если их родительский размер изменится.

Ответ 3

В дополнение к ответам Патриса Бернассолы и Фрэнка Остерфелда может возникнуть интерес порядок укладки. Это соответствует порядку детей, которые вы получаете с помощью findChildren, и способы управления порядком используются raise_ (с завершающим подчеркиванием), lower или stackUnder.

Пример изменения порядка с каждой из 3 доступных функций с помощью PySide:

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_()

Ответ 4

Я делаю это, создав класс на основе Qwidget, поместив его позицию в конструктор

например: QPointer a = новый QWidget (0, posx, posy, width, height)

в конструкторе этого класса Qwidget добавьте эти интегралы posx, posy, width, height, а затем do this.move(PosX, Posy); this.resize(ширина, высота);