2012-04-13 4 views
6

Я пытаюсь открыть новое диалоговое окно «Окно» из существующего диалогового окна в событии с нажатием кнопки, но я не могу это сделать, поскольку я открыл диалоговое окно из MainWindow.Откройте диалоговое окно из диалогового окна в qt

Я пытаюсь с:

Dialog1 *New = new Dialog1(); 

New->show(); 

Есть другой способ открытия диалогового окна формы существующего диалоговое окно ???

+0

не забудьте скрыть предыдущий Диалог-this-> шкурку(); –

ответ

8

Должна быть какая-то другая проблема, потому что ваш код выглядит хорошо для меня. Вот как я это сделать:

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

Кстати, обратите внимание, как я подключен «щелкнул» сигнал QPushButton на «шоу» слот QDialog в. Очень удобно.

1

Я новичок в QT, и у меня была аналогичная проблема. В моем случае я вызывал новое диалоговое окно из функции из главного диалога. Я использовал dlg->show, который не дождался результата нового диалога. Следовательно, программа все еще работает. Я меняю dlg->show на dlg->exec, и теперь диалог работает. В вашем коде диалоговое окно кажется локальной переменной, возможно, у вас такая же проблема. Другим вариантом может быть использование статического указателя.

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

в mainwindow.h файле вы должны объявить указатель на ваш новый диалог и включают в себя новый dialog.h как

#include <myNewDialog.h> 

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

и после этого вы можете вызвать ваш диалог будет показан в mainwindow.cpp как

void MainWindow::on_btnClose_clicked() 
{  
    objMyNewDialog= new MyNewDialog(this); 
    objMyNewDialog->show(); 
} 
Смежные вопросы