У меня есть программа, которая должна при запуске проверять, задан ли путь к проекту. Для этого я вложил в подкласс QMessageBox
, добавил несколько пользовательских вещей (например, пробел, чтобы сделать диалог шире), и я звоню QFileDialog::getExistingDirectory
, чтобы получить каталог.
Дело в том, что пользователь может нажать Отмена в QFileDialog
. Но я хочу, чтобы пользователь вернулся на QMessageBox
, чтобы иметь еще один шанс установить путь или выйти из программы вообще. Для этого я написал метод loop()
:
CustomMessageBox::loop()
{
while (true) {
this->exec();
if (this->clickedButton() == setPathButton) {
path = QFileDialog::getExistingDirectory(...);
if (!path.isEmpty()) { break; }
} else if (this->clickedButton() == quitButton) {
break;
}
}
}
Затем у меня есть метод getPath()
:
CustomMessageBox::getPath()
{
loop();
return path;
}
, который я вызываю в main.cpp
:
CustomMessageBox box;
QString path = box.getPath();
if (!path.isEmpty()) {
// save path, bla, bla
} else {
exit(EXIT_FAILURE)
}
Это работает, но разве это хорошая практика? Я специально спрашиваю об этом while
, внутри которого находится метод exec()
.