domingo, 11 de noviembre de 2012

Windows & Dialog



















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




No hay comentarios:

Publicar un comentario