Qt
Sobre el uso de diseños, la crianza de widgets
Buscar..
Introducción
Los diseños son necesarios en todas las aplicaciones Qt. Manejan el objeto, su posición, su tamaño, cómo se redimensionan.
Observaciones
De la documentación de diseño de Qt :
Cuando utiliza un diseño, no necesita pasar un padre al construir los widgets hijos. El diseño reparará automáticamente los widgets (usando QWidget :: setParent ()) de modo que sean hijos del widget en el que está instalado el diseño.
Así que hazlo:
QGroupBox *box = new QGroupBox("Information:", widget);
layout->addWidget(box);
o hacer
QGroupBox *box = new QGroupBox("Information:", nullptr);
layout->addWidget(box);
es exactamente lo mismo.
Disposición horizontal básica
La disposición horizontal configura el objeto dentro de él horizontalmente.
codigo basico
#include <QApplication>
#include <QMainWindow>
#include <QWidget>
#include <QHBoxLayout>
#include <QPushButton>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QMainWindow window;
QWidget *widget = new QWidget(&window);
QHBoxLayout *layout = new QHBoxLayout(widget);
window.setCentralWidget(widget);
widget->setLayout(layout);
layout->addWidget(new QPushButton("hello world", widget));
layout->addWidget(new QPushButton("I would like to have a layout !", widget));
layout->addWidget(new QPushButton("layouts are so great !", widget));
window.show();
return a.exec();
}
esto dará como resultado:
Diseño Vertical Básico
La disposición vertical configura el objeto dentro de él verticalmente.
#include "mainwindow.h"
#include <QApplication>
#include <QMainWindow>
#include <QWidget>
#include <QVBoxLayout>
#include <QPushButton>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QMainWindow window;
QWidget *widget = new QWidget(&window);
QVBoxLayout *layout = new QVBoxLayout(widget);
window.setCentralWidget(widget);
widget->setLayout(layout);
layout->addWidget(new QPushButton("hello world", widget));
layout->addWidget(new QPushButton("I would like to have a layout !", widget));
layout->addWidget(new QPushButton("layouts are so great !", widget));
window.show();
return a.exec();
}
salida:
Combinando diseños
Puede combinar un diseño múltiple gracias a otros QWidgets en su diseño principal para realizar efectos más específicos, como un campo de información: por ejemplo:
#include <QApplication>
#include <QMainWindow>
#include <QWidget>
#include <QVBoxLayout>
#include <QPushButton>
#include <QLabel>
#include <QLineEdit>
#include <QGroupBox>
#include <QTextEdit>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QMainWindow window;
QWidget *widget = new QWidget(&window);
QVBoxLayout *layout = new QVBoxLayout(widget);
window.setCentralWidget(widget);
widget->setLayout(layout);
QGroupBox *box = new QGroupBox("Information:", widget);
QVBoxLayout *boxLayout = new QVBoxLayout(box);
layout->addWidget(box);
QWidget* nameWidget = new QWidget(box);
QWidget* ageWidget = new QWidget(box);
QWidget* addressWidget = new QWidget(box);
boxLayout->addWidget(nameWidget);
boxLayout->addWidget(ageWidget);
boxLayout->addWidget(addressWidget);
QHBoxLayout *nameLayout = new QHBoxLayout(nameWidget);
nameLayout->addWidget(new QLabel("Name:"));
nameLayout->addWidget(new QLineEdit(nameWidget));
QHBoxLayout *ageLayout = new QHBoxLayout(ageWidget);
ageLayout->addWidget(new QLabel("Age:"));
ageLayout->addWidget(new QLineEdit(ageWidget));
QHBoxLayout *addressLayout = new QHBoxLayout(addressWidget);
addressLayout->addWidget(new QLabel("Address:"));
addressLayout->addWidget(new QLineEdit(addressWidget));
QWidget* validateWidget = new QWidget(widget);
QHBoxLayout *validateLayout = new QHBoxLayout(validateWidget);
validateLayout->addWidget(new QPushButton("Validate", validateWidget));
validateLayout->addWidget(new QPushButton("Reset", validateWidget));
validateLayout->addWidget(new QPushButton("Cancel", validateWidget));
layout->addWidget(validateWidget);
window.show();
return a.exec();
}
saldrá:
Ejemplo de diseño de cuadrícula
El diseño de cuadrícula es un diseño potente con el que puede hacer un diseño horizontal y vertical una vez.
ejemplo:
#include "mainwindow.h"
#include <QApplication>
#include <QMainWindow>
#include <QWidget>
#include <QVBoxLayout>
#include <QPushButton>
#include <QLabel>
#include <QLineEdit>
#include <QGroupBox>
#include <QTextEdit>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QMainWindow window;
QWidget *widget = new QWidget(&window);
QGridLayout *layout = new QGridLayout(widget);
window.setCentralWidget(widget);
widget->setLayout(layout);
QGroupBox *box = new QGroupBox("Information:", widget);
layout->addWidget(box, 0, 0);
QVBoxLayout *boxLayout = new QVBoxLayout(box);
QWidget* nameWidget = new QWidget(box);
QWidget* ageWidget = new QWidget(box);
QWidget* addressWidget = new QWidget(box);
boxLayout->addWidget(nameWidget);
boxLayout->addWidget(ageWidget);
boxLayout->addWidget(addressWidget);
QHBoxLayout *nameLayout = new QHBoxLayout(nameWidget);
nameLayout->addWidget(new QLabel("Name:"));
nameLayout->addWidget(new QLineEdit(nameWidget));
QHBoxLayout *ageLayout = new QHBoxLayout(ageWidget);
ageLayout->addWidget(new QLabel("Age:"));
ageLayout->addWidget(new QLineEdit(ageWidget));
QHBoxLayout *addressLayout = new QHBoxLayout(addressWidget);
addressLayout->addWidget(new QLabel("Address:"));
addressLayout->addWidget(new QLineEdit(addressWidget));
layout->addWidget(new QPushButton("Validate", widget), 1, 0);
layout->addWidget(new QPushButton("Reset", widget), 1, 1);
layout->addWidget(new QPushButton("Cancel", widget), 1, 2);
window.show();
return a.exec();
}
dar
para que pueda ver que el cuadro de grupo está solo en la primera columna y en la primera fila ya que addWidget era layout->addWidget(box, 0, 0);
Sin embargo, si lo cambia a layout->addWidget(box, 0, 0, 1, 3);
, el nuevo 0 y el 3 representan la cantidad de líneas y columnas que deseas para tu widget, por lo que ofrece:
exactamente lo mismo que creó un diseño horizontal y luego un diseño vertical en un subwidget.