2013-10-23 114 views
0

我有一個MainWindow它在構造函數中調用LoginWindow。 LoginDialog有一個按鈕來創建一個帳戶,該帳戶將創建一個QDialog隱藏窗口時Qt退出

我想隱藏LoginDialog而新帳戶的對話框正在顯示,但不知何故崩潰。

當我刪除隱藏和顯示LoginDialog函數的第一行和最後一行時,它絕對沒問題。爲什麼它會與hide()show()一起被調用?

void LoginDialog::createAccount() 
{ 
    // (-> will cause crash later) hide(); //Hides LoginDialog 
    QDialog dlg; 
    dlg.setGeometry(this->x(), this->y(), this->width(), this->height()); 

    QWidget* centralWidget = new QWidget(&dlg); 
    QVBoxLayout* l = new QVBoxLayout(centralWidget); 
    dlg.setLayout(l); 

    QLineEdit *dlgUser = new QLineEdit(centralWidget); 
    QLineEdit *dlgPass = new QLineEdit(centralWidget); 
    dlgPass->setEchoMode(QLineEdit::Password); 

    l->addWidget(new QLabel(tr("Username :"), centralWidget)); 
    l->addWidget(dlgUser); 
    l->addWidget(new QLabel(tr("Password :"), centralWidget)); 
    l->addWidget(dlgPass); 
    l->addWidget(new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, centralWidget)); 

    if(dlg.exec() != QDialog::Rejected) 
    { 
     ; 
    } 
    delete centralWidget; 
    // (-> will cause crash later) show(); //Show LoginDialog again 
} 

有沒有錯誤,它只是意外崩潰,有時它會退出代碼(0)。

使用調試器進行分析並確實經歷每一步時,它不會崩潰。 LoginDialog將顯示,它不會崩潰。

回答

0

我沒有在對話框中獲得您的centralWidget的用途?我認爲根本不需要,你可以直接在對話框中組裝你的小部件。我會重寫你的代碼是這樣的:

void LoginDialog::createAccount() 
{ 
    QDialog dlg; 
    dlg.setGeometry(this->x(), this->y(), this->width(), this->height()); 

    QLineEdit *dlgUser = new QLineEdit(&dlg); 
    QLineEdit *dlgPass = new QLineEdit(&dlg); 
    dlgPass->setEchoMode(QLineEdit::Password); 

    QVBoxLayout* l = new QVBoxLayout; 
    l->addWidget(new QLabel(tr("Username :"), &dlg)); 
    l->addWidget(dlgUser); 
    l->addWidget(new QLabel(tr("Password :"), &dlg)); 
    l->addWidget(dlgPass); 
    l->addWidget(new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, &dlg)); 

    dlg.setLayout(l); 

    if(dlg.exec() != QDialog::Rejected) 
    { 
     // Do something. 
    } 
} 
+0

隱藏和顯示 – Davlog

+0

@Davlog當它仍然崩潰啊,你隱藏父對話框當你打開創建一個帳戶,另一個模式子對話框?那麼,如果你只是調用'dlg.show()'而不是調用'dlg.exec()'呢? – vahancho

+0

嗯......我用dlg.show()替換了if語句,但它仍然崩潰。 – Davlog