У меня есть главное окно Qt, которое открывает диалоговое окно с кнопками ОК и Отмена. В этом диалоговом окне есть простой счетчик, который запрашивает у пользователя номер, который должен быть возвращен в главное окно при нажатии кнопки «ОК» или «Отмена» (для отмены он просто отправит обратно -1).
Я думал об использовании кода в сигнале в mainWindow.cpp примерно так:
void mainWindow::slot_openNumberDlg(){
// Create a new dialog
numberDlg dlg( this );
// Show it and wait for Ok or Cancel
if( dlg.exec() == QDialog::Accepted ){
return;
}
}
Но как мне вернуть значение счетчика в диалоговом окне обратно в главное окно, если оно будет уничтожено при нажатии кнопки?
Я также подумал об альтернативном решении, где я бы инициализировал диалог в конструкторе mainWindow, но он не отображается, пока сигнал не активирует слот в mainWindow.cpp, вот так:
// Create as pointer in main.h:
numberDlg *dlg;
// Initialize pointer and setup listener in constructor (main.cpp):
mainWindow::mainWindow(){
dlg = new numberDlg();
QObject::connect( dlg, SIGNAL( sig_retVal(int) ), ui->widget, SLOT( slot_showNum(int) ) );
}
// Make a function to handle show/close:
void mainWindow::slot_numberOpenClose(bool trigger){
if(trigger){
dlg->show();
} else {
dlg->close();
}
}
Приведенный выше код сможет отправить число из счетчика диалога в mainWindow, используя сигнал / слот, но он не заблокирует mainWindow. Я не хочу, чтобы пользователь продолжал использовать mainWindow, пока диалоговое окно не было принято или отклонено.
Любые идеи о том, как я могу заблокировать главное окно и отправить номер обратно в главное при закрытии диалога?