[Qt] Creación en horizontal por layouts?

Iniciado por Puntoinfinito, 18 Marzo 2013, 19:48 PM

0 Miembros y 1 Visitante están viendo este tema.

Puntoinfinito

Hola!! Tengo una preguntilla sobre Qt, antes de todo dejaré un código para ejemplificar el problema: (Pero ya os digo, fijaros solo en el segundo y tercer código)

Código (cpp) [Seleccionar]
   #include <QApplication>
   #include <QHBoxLayout>
   #include <QVBoxLayout>
   #include <QLabel>
   #include <QLineEdit>
   #include <QPushButton>
   #include <QDialog>
   
   int main(int argc, char *argv[])
   {
   QApplication app(argc, argv);
   
   QDialog ventana;
   QHBoxLayout *layoutUsuario = new QHBoxLayout;
   QHBoxLayout *layoutContrasenia = new QHBoxLayout;
   QHBoxLayout *layoutBotones = new QHBoxLayout;
   QVBoxLayout *layoutPrincipal = new QVBoxLayout(&ventana);
   
   QLabel *etiquetaUsuario = new QLabel("Usuario");
   QLabel *etiquetaContrasenia = new QLabel("Password");
   
   QLineEdit *campoUsuario = new QLineEdit;
   QLineEdit *campoContrasenia = new QLineEdit;
   
   QPushButton *botonAceptar = new QPushButton("Aceptar");
   QPushButton *botonCancelar = new QPushButton("Cancelar");
   
   layoutUsuario->addWidget(etiquetaUsuario);
   layoutUsuario->addWidget(campoUsuario);
   
   layoutContrasenia->addWidget(etiquetaContrasenia);
   layoutContrasenia->addWidget(campoContrasenia);
   
   layoutBotones->addStretch();
   layoutBotones->addWidget(botonAceptar);
   layoutBotones->addWidget(botonCancelar);
   
   layoutPrincipal->addLayout(layoutUsuario);
   layoutPrincipal->addLayout(layoutContrasenia);
   layoutPrincipal->addLayout(layoutBotones);
   
   ventana.setWindowTitle(QObject::trUtf8("Iniciar Sesión"));
   ventana.show();
   
   return app.exec();
   }


Genera algo tal que así:



Mi duda es la siguiente; no entiendo bien bien el funcionamiento de este código ya que lo que hace es crear una tabla de 3x3 donde en el primero hay un label con un textbox, el segundo lo mismo y el tercero dos botones. Pero quedan ordenadas de manera que no he definido bien bien, según lo que puedo leer, creo que lo ordena por layouts, cada layout es una nueva linea que tu le iras atribuyendo objectos de cualquier tipo:

Código (cpp) [Seleccionar]
QHBoxLayout *layoutUsuario = new QHBoxLayout;
QHBoxLayout *layoutContrasenia = new QHBoxLayout;
QHBoxLayout *layoutBotones = new QHBoxLayout;


Y luego como he dicho le atribuyo:

Código (cpp) [Seleccionar]
layoutUsuario->addWidget(etiquetaUsuario);
layoutUsuario->addWidget(campoUsuario);

layoutContrasenia->addWidget(etiquetaContrasenia);
layoutContrasenia->addWidget(campoContrasenia);

layoutBotones->addStretch();
layoutBotones->addWidget(botonAceptar);
layoutBotones->addWidget(botonCancelar);


Entonces lo digo bien o no? xD es cierto que se ordena mediante los layouts? Es algo que en este ejemplo no me ha quedado muy claro ya que estaba acostumbrado a hacerlo de manera tabuladora...

layout->addWidget(boton1, 0, 0);
layout->addWidget(boton2, 1, 1);
layout->addWidget(boton3, 3, 3);


...que es como creo que es como queda mejor xD

Saludos!!
AHORA EN SOFTONIC || CLICK HERE!!
Base64: QWNhYmFzIGRlIHBlcmRlciAxIG1pbnV0byBkZSB0dSB2aWRhLiBPbOkh



HACK AND 1337 : http://hackandleet.blogspot.com
WEBSITE: http://www.infiniterware.

avesudra

#1
Sí es exactamente como dices, en ese programa está ordenado así:

En los layouts horizontales, los widget se van añadiendo uno al lado del otro, y en los verticales en una pila, por eso sale como sale. Fíjate que el layout principal es un layout vertical no horizontal. Es sencillo de entender.

¡Un saludo!
Regístrate en

Puntoinfinito

Ahhhh!! Ahora pillo lo de;

QHBoxLayout
QVBoxLayout


Ya lo entiendo!! Gracias!! :)

Pero una pregunta, y si lo que quiero hacer es hacer un hueco entre layout y layout, creo uno sin contenido y luego lo añado al principal entre los dos que quiero separar??

Saludos!!
AHORA EN SOFTONIC || CLICK HERE!!
Base64: QWNhYmFzIGRlIHBlcmRlciAxIG1pbnV0byBkZSB0dSB2aWRhLiBPbOkh



HACK AND 1337 : http://hackandleet.blogspot.com
WEBSITE: http://www.infiniterware.

avesudra

Me alegro de que lo entiendas, para hacer un hueco debes hacer un layout entre dos layouts y ponerle este "widget"(QSpacerItem) http://qt-project.org/doc/qt-4.8/qspaceritem.html .Es un espacio, que puede ser vertical o horizontal y del tamaño que quieras.Si no le pones nada será un layout vacío tamaño 0 supongo...

¡Un saludo!
Regístrate en

Puntoinfinito

Entendido, gracias de nuevo, si vuelvo a tener una duda de Qt no dudaré en preguntártelo xD

Saludos avesudra  :D
AHORA EN SOFTONIC || CLICK HERE!!
Base64: QWNhYmFzIGRlIHBlcmRlciAxIG1pbnV0byBkZSB0dSB2aWRhLiBPbOkh



HACK AND 1337 : http://hackandleet.blogspot.com
WEBSITE: http://www.infiniterware.