Здравствуйте, задался довольно-таки очень простым вопросом... Нельзя ли сделать более красивую проверку полей формы на пустое значение, к примеру вот:
if(ui->editName->text().isEmpty() || ui->editDateOfBirth->text().isEmpty() || ui->editAddress->text().isEmpty() ||
ui->editPersonalData->text().isEmpty() || ui->editPhoneNumber->text().isEmpty())
{
QMessageBox::warning(0, "Ошибка", "Введены не все данные.");
return;
}
ИМХО, хуже чем "Введены не все данные" может быть только "Не правильные данные" + очистка формы.
Не мучайте своих пользователей сделайте:
if(ui->editName->text().isEmpty()){
QMessageBox::warning(0, "Ошибка", "Введите имя");
return;
}
if(ui->editDateOfBirth->text().isEmpty()){
QMessageBox::warning(0, "Ошибка", "Введите дату рождения");
return;
}
//...
Если пользователей не жалко. Можно так:
//Добавляем поле класса с полями ввода
QList<QLineEdit*> inputs;
//Где-то в конструкторе укладываем все проверяемые поля в список
inputs.append(ui->editName);
inputs.append(ui->editDateOfBirth);
//В каком-то методе
auto isEmpty = [](QLineEdit *input){return input->text().isEmpty();};
if(std::any_of(inputs.begin(), inputs.end(), isEmpty)){
QMessageBox::warning(0, "Ошибка", "Введены не все данные.");
return;
}
Ну что-нибудь вроде C++17 fold expression:
template<typename... TPointerToWidget> bool
someIsEmpty(TPointerToWidget... p_widget)
{
return(p_widget->text().isEmpty() || ...);
}
if(someIsEmpty(ui->editName, ui->editDateOfBirth, ui->editAddress, ui->editPersonalData, ui->editPhoneNumber))
Как альтернатива можно решить этот вопрос принципиально, задавая свойства валидации для каждого поля, а затем пробегаясь по всем полям.
Если тип у всех полей одинаковый, то можно сделать вот такой вариант C++11
bool
someIsEmpty(::std::initializer_list<QEdit *> const & pointers_to_edits)
{
for(auto const & p_edit: pointers_to_edits)
{
if(p_edit->text().isEmpty())
{
return(true);
}
}
return(false);
}
if(someIsEmpty({ui->editName, ui->editDateOfBirth, ui->editAddress, ui->editPersonalData, ui->editPhoneNumber}))
Оберни в метод:
bool Form::isDataValid() {
return !ui->editName.isEmpty() &&
!ui->editDateOfBirth.isEmpty() &&
!ui->editAddress.isEmpty() &&
!ui->editPersonalData.isEmpty() &&
!ui->editPhoneNumber.isEmpty();
}
//....
if(!isDataValid())
{
QMessageBox::warning(0, "Ошибка", "Введены не все данные.");
return;
}
bool isSomeEmpty(const QList<QLineEdit *> &_list)
{
for(QLineEdit *_edit : _list)
{
if(_edit->text().isEmpty())
{
return true;
}
}
return false;
}
void MainWindow::on_pushButton_clicked()
{
if(isSomeEmpty(
{
ui->editAddress,
ui->editDateOfBirth,
ui->editName,
ui->editPersonalData,
ui->editPhoneNumber
}))
{
QMessageBox::warning(0, "Ошибка", "Введены не все данные.");
return;
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
А можно ли привести тип умного указателя родительского класса к дочернему? К примеру есть есть базовый класс Models и от него наследуется класс...
Очень сложно разобраться со связными списками( Помогите разобраться в этой части кода,пожалуйста:
Дан массив, требуется найти такой подмассив с максимальной суммой элементов в нем, чтобы начало и конец отрезка были одинаковыми(вывести...