생성자에서 LoginWindow를 호출하는 MainWindow
이 있습니다. 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
이 표시되며 충돌이 발생하지 않습니다.
가, 아, 당신이 부모 대화 상자를 숨기기? 글쎄,'dlg.exec()'를 호출하는 대신'dlg.show()'를 호출하면 어떨까요? – Davlog
표시 할 때 여전히 충돌
– vahanchohmm ... if 문을 dlg.show()로 대체했지만 여전히 충돌합니다. – Davlog