2010-12-01 26 views
17

Estoy usando QT para desarrollar una aplicación de interfaz de usuario rica.Cómo establecer la posición absoluta de los widgets en qt

  1. necesito para colocar los widgets en las posiciones absolutas
  2. que debería ser capaz de poner el widget en el fondo/primer plano para agregar algunos efectos.

El ejemplo simple sería, tengo que mostrar una caldera con el nivel del agua dentro del tanque de alimentación.

  1. Tome una imagen del tanque de alimentación e incruste en una etiqueta.
  2. Coloque una barra de progreso en el centro del tanque de alimentación para mostrar el nivel del agua.

Ahora, en este caso, la barra de progreso estaría en primer plano y la etiqueta en el fondo.

Saludos,

Respuesta

25

Sólo se necesita para crear el widget, indican su QWidget padres y luego mostrarlo.

No lo agregue al diseño principal, de lo contrario no podrá moverlo como desee.

No se olvide de indicar su padre, sino que se mostrará como widget independiente.

En estas condiciones, su widget se considerará como hijo de QWidget pero no como miembro del diseño principal. Por lo tanto, será un niño "flotante" y debe gestionar su comportamiento al redimensionar el QWidget de los padres.

30

Utilice QWidget :: move() para establecer la posición, QWidget :: resize() para establecer el tamaño y vuelva a implementar el controlador resizeEvent() del padre si necesita volver a colocar los widgets si su tamaño principal se cambia.

+0

Eso es, de hecho :) – mlvljr

3

Adicionalmente a las respuestas por Patrice Bernassola y Frank Osterfeld el orden de apilamiento puede ser de interés. Corresponde al orden de los niños que obtienes por findChildren y las formas de manipular la orden están usando raise_ (con el guión bajo final), lower o stackUnder.

Un ejemplo cambiando el orden con cada una de las 3 funciones disponibles utilizando PySide está aquí:

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

lo hago mediante la creación de una clase basada en Qwidget puse su posición en el constructor

por ejemplo: QPointer a = new QWidget (0, posx, ramillete, anchura, altura)

en el constructor de esta Qwidgetclass añaden estos integrers POSX, ramillete, anchura, altura y luego hacer this.move (posx, ramillete); this.resize (ancho, alto);

Cuestiones relacionadas