tutorial programming knowledge framework creator qt layout qt-designer

programming - Qt Layout en QMainWindow



qt tutorial (4)

QMainWindow con QtCreator''s 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.

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


Agregue 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.


Esto ya está respondido, pero personalmente prefiero mantener todos los elementos y diseños de control 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.


No es necesario crear un QVBoxLayout manualmente. Simplemente selecciona tu QWidget central y presiona un botón make-layout.


Si desea hacerlo con código en lugar de usar QtCreator , puede establecer el diseño en un QWidget y luego configurar el QWidget como el widget central de la ventana principal como este:

#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); }