Procedimiento para crear una ventana de dialogo que bloquea la ventana principal o convive con ella.
- Crear nuevo proyecto GUI y editar el menú desplegable poniendo File y en su primer elemento New Window
- En actions click derecho y añadir con Go to Slot la opción triggered()
- Esto añade a mainwindow.cpp el siguiente código :
void MainWindow::on_actionNew_Window_triggered()
{
}
- Arrastramos un PlainTextEdit (editor de texto) al formulario
- En mainwindows.cpp añadimos la linea en negrita, para que el plainTexEdit se eexpanda a toda la ventana.
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
setCentralWidget(ui->plainTextEdit);
}
- En el minuto 4 del vídeo se añade una ventana de dialogo.
- En el inicio del árbol del proyecto, click derecho Add New... , Files and Classes : Qt , Qt Designer Form Classm, Next, Dialog without Buttons, Nombre : MyDialog,
Para poder llamar este ventana de dialogo desde la ventana principal, añadimos en la parte superior de mainwindow.cpp la línea en negrita :
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "mydialog.h"
En la parte inferior de mainwindow.cpp. añadimos las líneas en negrita.
void MainWindow::on_actionNew_Window_triggered(){MyDialog mDialog;mDialog.setModal(true);mDialog.exec();}
Esto crea una ventana de dialogo modal, que toma el foco y no lo suelta.
Para que no sea modal, no basta con poner false, hay que hacer que la ventana de dialogo sea hija de la ventana principal :
Al principio de mainwindows.h añadir el código en negrita :
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>#include "mydialog.h"Al final de mainwindows.h añadir el código en negrita :
private:
Ui::MainWindow *ui;MyDialog *mDialog;};Al principio de mainwindows.cpp añadir el código en negrita :
#endif // MAINWINDOW_H#include "mainwindow.h"#include "ui_mainwindow.h"#include "mydialog.h"Al final de mainwindows.cpp añadir el código en negrita :
void MainWindow::on_actionNew_Window_triggered(){mDialog = new MyDialog(this);mDialog->show();}