Кнопка закрытия на qDialog закрывается только при втором нажатии
Я пытаюсь создать диалоговое окно, содержащее инструмент для рекламы, который отделен от моей основной программы, он запускается из действия в меню.
У меня есть следующий код:
void MainWindow::on_actionCalibration_Tool_triggered()
{
QGridLayout *grid = new QGridLayout;
NewDialog.setLayout(grid);
NewDialog.setMinimumHeight(500);
NewDialog.setMinimumWidth(800);
QLabel *label = new QLabel;
QFont sansFont("MS Shell Dlg 2",22, QFont::Bold);
label->setText("Test");
label->setFont(sansFont);
QPushButton *okbutton = new QPushButton;
QPushButton *closebutton = new QPushButton;
okbutton->setText("Ok");
closebutton->setText("Close");
QTimer *timer = new QTimer;
connect(okbutton,SIGNAL(clicked()),this,SLOT(on_ScanpB_clicked()));
connect(closebutton,SIGNAL(clicked()),this,SLOT(CloseDialog()));
grid->addWidget(label);
grid->addWidget(okbutton);
grid->addWidget(closebutton);
NewDialog.exec();
NewDialog.show();
}
void MainWindow::CloseDialog()
{
NewDialog.close();
}
С NewDialog
определяется в main window.h
как QDialog.
Моя проблема заключается в том, что когда я нажимаю кнопку закрытия, диалоговое окно закрывается на доли секунды, а затем снова открывается, после второго нажатия кнопки закрытия оно закрывается навсегда.
Есть ли лучшая реализация или способ обойти это?
Спасибо
1 ответ
Вы не должны звонить QDialog::show
а также QDialog::exec
, Вместо этого выберите один, чтобы позвонить.
использование exec
если вы хотите заблокировать взаимодействие пользователя с родителем диалогового окна, пока оно открыто. Пользователь не будет играть с чем-либо еще в приложении, пока он не закроет диалог. Это называется модальным.
использование show
если вы хотите разрешить пользователю работать с диалоговым окном и остальной частью приложения одновременно.
Обычно вы бы выбрали exec
, С ним легче работать. В вашем случае вы отображали диалоговое окно дважды, вызывая обе функции.