2012-04-13 10 views
6

Próbuję otworzyć nowe okno dialogowe z istniejącego okna dialogowego w zdarzeniu kliknięcia przycisku, ale nie jestem w stanie tego zrobić, ponieważ otworzyłem okno dialogowe z MainWindow.Otwórz nowe okno dialogowe w qt

Staram się:

Dialog1 *New = new Dialog1(); 

New->show(); 

Czy istnieje inny sposób otwierania okna dialogowego formę istniejącego okna dialogowego ???

+0

nie zapomnij, aby ukryć poprzednią Dialog-to-> hide(); –

Odpowiedz

8

Musi być jakiś inny problem, ponieważ twój kod wygląda mi dobrze. Oto jak ja to zrobię:

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

Nawiasem mówiąc, trzeba pamiętać, w jaki sposób mam podłączyć sygnał QPushButton za „kliknięciu” na „pokaz” slot QDialog użytkownika. Bardzo przydatny.

1

Jestem nowy w QT i miałem podobny problem. W moim przypadku wywołałem nowe okno dialogowe z funkcji z głównego okna dialogowego. Używałem dlg->show, który nie czeka na wynik nowego okna dialogowego. Stąd program nadal działa. Zmieniam dlg->show dla dlg->exec, a okno dialogowe działa teraz. W twoim kodzie dialog wydaje się być zmienną lokalną, być może masz ten sam problem. Inną opcją może być użycie wskaźnika statycznego.

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

w mainwindow.h pliku należy zadeklarować wskaźnik do nowego dialogowe i obejmują nowe dialog.h jak

#include <myNewDialog.h> 

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

i po tym można połączyć się okno do pokazania się w mainwindow.cpp jak

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