2012-04-13 14 views
6

Sto provando ad aprire una nuova finestra di dialogo da una finestra di dialogo esistente in un evento di un clic del pulsante, ma non riesco a farlo mentre ho aperto la finestra di dialogo da MainWindow.Apre una nuova finestra di dialogo in qt

sto provando con:

Dialog1 *New = new Dialog1(); 

New->show(); 

Esiste un modo diverso di apertura modulo finestra di dialogo finestra di dialogo esistente ???

+0

non dimenticare di nascondere la finestra di dialogo precedente-this-> hide(); –

risposta

8

Ci deve essere qualche altro problema, perché il tuo codice mi sembra buono. Ecco come lo farei:

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

A proposito, notare come ho collegato segnale "cliccato" di QPushButton alla slot "spettacolo" di QDialog. Molto maneggevole.

1

Sono nuovo a QT e ho avuto un problema simile. Nel mio caso, stavo chiamando la nuova finestra di dialogo da una funzione dalla finestra di dialogo principale. Stavo usando dlg->show che non aspetta il risultato della nuova finestra di dialogo. Quindi il programma è ancora in esecuzione. Cambio dlg->show per dlg->exec e la finestra di dialogo funziona ora. Nel tuo codice, la finestra di dialogo sembra essere una variabile locale, forse hai lo stesso problema. Un'altra opzione potrebbe essere quella di utilizzare un puntatore statico invece.

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

nel file di mainwindow.h si dovrebbe dichiarare un puntatore al nuovo dialogo e includere il nuovo dialog.h come

#include <myNewDialog.h> 

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

e dopo che è possibile chiamare il dialogo per essere mostrato in mainwindow.cpp come

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