2012-04-13 28 views
6

Estoy tratando de abrir un nuevo cuadro de diálogo Ventana desde un cuadro de diálogo existente en un botón clic evento, pero no puedo hacerlo cuando abrí el cuadro de diálogo desde MainWindow.Abrir nuevo cuadro de diálogo desde un cuadro de diálogo en qt

que estoy tratando con:

Dialog1 *New = new Dialog1(); 

New->show(); 

¿Hay una manera diferente de la forma ventana de diálogo de la ventana de diálogo existente abrir ???

+0

no se olvide de ocultar el cuadro de diálogo anterior-this-> hide(); –

Respuesta

8

Debe haber algún otro problema, porque su código se ve bien para mí. Así es como yo lo haría:

#include <QtGui> 

class Dialog : public QDialog 
{ 
public: 
    Dialog() 
    { 
     QDialog *subDialog = new QDialog; 
     subDialog->setWindowTitle("Sub Dialog"); 
     QPushButton *button = new QPushButton("Push to open new dialog", this); 
     connect(button, SIGNAL(clicked()), subDialog, SLOT(show())); 
    } 
}; 

class MainWindow : public QMainWindow 
{ 
public: 
    MainWindow() 
    { 
     Dialog *dialog = new Dialog; 
     dialog->setWindowTitle("Dialog"); 
     dialog->show(); 
    } 
}; 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 

    MainWindow w; 
    w.setWindowTitle("Main Window"); 
    w.show(); 

    return a.exec(); 
} 

Por cierto, tenga en cuenta la forma en que he conectado la señal de "clic" de QPushButton a la ranura "espectáculo" de QDialog. Muy útil.

1

Soy nuevo en QT y tuve un problema similar. En mi caso, estaba llamando al nuevo diálogo desde una función desde el cuadro de diálogo principal. Estaba usando dlg->show que no espera hasta el resultado del nuevo diálogo. Por lo tanto, el programa aún se está ejecutando. Cambio dlg->show por dlg->exec y el diálogo funciona ahora. En su código, el diálogo parece ser una variable local, quizás tenga el mismo problema. Otra opción podría ser usar un puntero estático en su lugar.

Dialog1 *newDlg = new Dialog1(); 
this->hide(); 
int result = newDlg->exec(); 
this->show(); 
delete newDlg; 
0

en el archivo mainwindow.h debe declarar un puntero a su nuevo cuadro de diálogo e incluir el nuevo dialog.h como

#include <myNewDialog.h> 

private: 
    Ui::MainWindow *ui; 
    MyNewDialog *objMyNewDialog; 

y después de que se puede llamar al diálogo que se muestra en mainwindow.cpp como

void MainWindow::on_btnClose_clicked() 
{  
    objMyNewDialog= new MyNewDialog(this); 
    objMyNewDialog->show(); 
} 
Cuestiones relacionadas