2009-08-25 13 views
10

Estoy tratando de crear un formulario estándar de dos columnas, donde la primera columna es una etiqueta de texto (QLabel) y la segunda columna es un widget interactivo, generalmente un campo de texto (QLineEdit). Hemos decidido colocar filas de formulario que comparten un tema común dentro de un QGroupBox, y por lo tanto en un diseño separado del diseño principal. Por lo tanto, los elementos del formulario dentro de cada QGroupBox no se alinean horizontalmente con los elementos del formulario fuera del QGroupBox es.En Qt, ¿cómo alineo los elementos de formulario en diferentes cuadros de grupo?

¿Cómo puedo usar cuadros de grupo y diseños de manera que los cuadros de grupo QLabel sy QLineEdit s, tanto dentro como fuera, estén alineados (horizontalmente) entre sí?

Gracias!

Respuesta

4

Puede establecer la propiedad minimumWidth en todas las etiquetas dentro de los groupboxes a algo que es lo suficientemente ancha como para mostrar la etiqueta más amplia. Eso alineará todas las etiquetas dentro de los diferentes cuadros de grupo.

Ahora, para alinear las etiquetas fuera de las groupbox con las que están adentro: Primero, supongo que cada etiqueta/par de lineedit está en su propio diseño horizontal, o que tiene varias filas dentro de una grilla. En cualquier caso, lo que puede hacer es establecer el ancho mínimo de las etiquetas con el mismo valor que las etiquetas en las cajas de grupo. Finalmente, ajuste las propiedades layoutLeftMargin, layoutRightMargin y layoutSpacing en el diseño horizontal (o en cuadrícula) hasta que los bordes derecho e izquierdo del par label/lineedit se alineen con los que están dentro de los groupboxes.

Si todavía no está utilizando el Editor de formularios en Qt Creator, o Qt Designer, para construir su interfaz de usuario, creo que esta tarea es bastante fácil.

Tengo que admitir, esto se siente un poco tonto, pero en el caso de prueba simple que construí, parecía funcionar bien. Por otro lado, parece que se romperá si el usuario cambia el tamaño de la fuente. Tal vez hay una mejor manera?

Espero que esto ayude.

+0

Voy a dar una oportunidad - Te dejaré saber cómo va. – swongu

+0

No probé el segundo componente, pero puedo decirle que el ajuste del ancho mínimo de las etiquetas dentro de los cuadros de grupo de nivel superior funcionó mágicamente. Ver mi propia respuesta para pseudocódigo. – swongu

1

No creo que funcione con conjuntos de diseños horizontal y vertical anidados. ¿Has considerado un QGridLayout?

+0

Necesito elementos de formulario dentro de los diferentes cuadros de grupo, por lo que lamentablemente van a necesitar diferentes/anidada diseños. ¡Ya estoy usando 'QGridLayout', en realidad! – swongu

0

Uso setGeometry() para forzar a todos sus columnas a la misma anchura

+0

¿No rompería esto las políticas de diseño? – swongu

1

kenrogers siempre la solución, y he aquí algo de código incompleto que he utilizado para conseguir que funcione:

int width = 0 ; 
QDialog* dialog ; 
QList<QGridLayout*> layouts = dialog->findChildren<QGridLayout*>() ; 
QList<QLabel*> labels ; 
foreach (QGridLayout* layout, layouts) 
{ 
    // Loop through each layout and get the label on column 0. 
    QLabel* foundLabel ; 
    labels << foundLabel ; 

    // Get the width. 
    width = qMax(foundLabel->width(), width) ; 
} 

foreach (QLabel* label, labels) 
{ 
    label->setMinimumWidth(width) ; 
} 
Cuestiones relacionadas