2012-04-13 18 views
6

Ich versuche, ein neues Dialogfenster aus einem bestehenden Dialog zu öffnen auf einer Schaltfläche klicken Ereignis, aber ich bin nicht in der Lage, dies zu tun, wie ich das Dialogfenster von Mainwindow geöffnet.Öffnen neuer Dialog aus einem Dialog in qt

Ich versuche, mit:

Dialog1 *New = new Dialog1(); 

New->show(); 

Gibt es eine andere Art und Weise Dialogfenster Form bestehende Dialogfenster zu öffnen ???

+0

nicht vergessen vorherigen Dialog-this-> hide() zu verstecken; –

Antwort

8

Es muss ein anderes Problem sein, weil Ihr Code sie gut aussieht. Hier ist, wie ich es tun würde:

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

By the way, beachten Sie, wie ich verbunden habe QPushButton des „geklickt“ -Signal an QDialog der „Show“ Slot. Sehr praktisch.

1

Ich bin neu in QT und ich habe ein ähnliches Problem. In meinem Fall habe ich den neuen Dialog von einer Funktion aus dem Hauptdialog aufgerufen. Ich war mit dlg->show, die, bis das Ergebnis des neuen Dialog wartet nicht. Daher läuft das Programm noch. Ich wechsle dlg->show für dlg->exec und der Dialog funktioniert jetzt. In Ihrem Code, scheint der Dialog eine lokale Variable zu sein, vielleicht Sie das gleiche Problem haben. Eine andere Option könnte sein, stattdessen einen statischen Zeiger zu verwenden.

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

in mainwindow.h Datei, die Sie einen Zeiger auf Ihren neuen Dialog und beinhalten die neuen dialog.h wie

#include <myNewDialog.h> 

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

und danach können Sie Ihren Dialog aufrufen werden angezeigt erklären sollte in mainwindow.cpp wie

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