2009-10-02 21 views
31

Diseñé un QMainWindow con un diseñador QtCreator's. Consiste en el widget central predeterminado (un QWidget) que contiene un QVBoxLayout con todos los demás widgets. Ahora todo lo que quiero es que el QVBoxLayout ocupe automáticamente todo el espacio rectangular del widgets central.Qt Layout en QMainWindow

¿Cómo puedo hacer esto? No encontré ninguna propiedad utilizable ni en las propiedades de widgets centrales ni en las QVBoxLayout's.

Respuesta

35

No es necesario crear un QVBoxLayout manualmente. Simplemente seleccione su central QWidget y presione un botón de diseño.

alt text

+0

Muy bien, eso es lo que buscaba. ¡Gracias! – Milan

+16

Tenga en cuenta que debe tener al menos un widget en el widget central para que se habiliten los botones de diseño de marca –

10

añadir al menos un widget en su MainWindow. Luego, seleccione su ventana haciendo clic en ella y haga clic en el botón VerticalLayout en la parte superior de QTCreator. Usted Vertical Layout se agrega automáticamente al widget central y llena toda la superficie.

+0

Más o menos lo mismo que la respuesta de gs, ¡pero gracias! – Milan

+2

Gracias. No pude entenderlo porque no tenía widgets en mi MainWindow, por lo que tu respuesta fue muy útil –

55

Si quiere hacerlo con código en lugar de utilizar QtCreator, podría configurar el diseño de una QWidget y luego configurar el QWidget como el widget central de la ventana principal de la siguiente manera:

#include <QtGui> 
#include <QWidget> 
#include <QHBoxLayout> 
#include "mainwindow.h" 

MainWindow::MainWindow() { 

     // Set layout 
     QHBoxLayout *layout = new QHBoxLayout; 
     layout->addWidget(myWidget1); 
     layout->addWidget(myWidget2); 

     // Set layout in QWidget 
     QWidget *window = new QWidget(); 
     window->setLayout(layout); 

     // Set QWidget as the central layout of the main window 
     setCentralWidget(window); 

} 
+1

¡Muchas gracias! Pero no entiendo ... ¿cuál es el razonamiento detrás de la necesidad introducida de crear un nuevo widget? ¿No hubiera sido más intuitivo simplemente permitir que el diseño se aplique a la ventana principal? – User1291

3

Este es ya respondida, pero personalmente prefiero mantener todos los elementos de control y diseños agregados manualmente al formulario. No agrego controles en los archivos de clase, simplemente conecto las señales/ranuras para ocultar/mostrar widgets relevantes para la lógica en la clase, dentro de la clase.

Para agregar manualmente un diseño a cualquier widget, primero debe agregar al menos un widget/control secundario. Eso no estaba del todo claro para mí y estaba tratando de agregar el diseño primero.