У меня есть заявление, которое я делаю для своей работы.Это в основном принимает сотрудников и их доступность и составляет график.Помимо этого, у меня есть страница под названием «Редактировать сотрудника», на которой я могу редактировать информацию любого сотрудника.У меня есть кнопка «удалить», в которой, когда вы нажимаете ее, вы получаете текущую строку из qlistwidget, и он удаляет этот элемент.Все работает, пока у меня не осталось только одного элемента в векторе.
Я пробовал разные формы удаления из вектора.Я пытался .clear (), .erase (vec.begin (), vec.end ()), .erase (vec.begin () + position) и т. Д.
У меня также был цикл для отображения цикласодержимое вектора, он показал только 1 элемент в векторе, что было правильно.В векторе не было пустых мест или чего-либо, что вы могли бы считать «поврежденным».
void MainWindow::deleteEmployee(int position)
{
// employeeList.erase(employeeList.begin() + position);
if(employeeList.size() == 1)
{
// fails only when trying to delete from last index
employeeList.clear();
}
else
{
employeeList.erase(employeeList.begin() + position);
}
}
void MainWindow::on_editEmployeeDelete_pushButton_clicked()
{
QMessageBox::StandardButton reply;
reply = QMessageBox::question(this, "Delete Employee", "Are you sure you want to delete " + employeeList.at(ui->editEmployee_listWidget->currentRow()).getFirstName()
+ " " + employeeList.at(ui->editEmployee_listWidget->currentRow()).getLastName() + "?",
QMessageBox::Yes|QMessageBox::No);
if (reply == QMessageBox::Yes)
{
QMessageBox::information(nullptr, "Success", employeeList.at(ui->editEmployee_listWidget->currentRow()).getFirstName() + " " +
employeeList.at(ui->editEmployee_listWidget->currentRow()).getLastName() +
" has been deleted successfully.");
deleteEmployee(ui->editEmployee_listWidget->currentRow());
// clears the qlistwidget once again to add all employees left in the vector
ui->editEmployee_listWidget->blockSignals(true);
ui->editEmployee_listWidget->clear();
ui->editEmployee_listWidget->blockSignals(false);
// adds all the employees names to the qlistwidget
for(unsigned long long i = 0; i < employeeList.size(); i++)
{
ui->editEmployee_listWidget->addItem(employeeList.at(i).getLastName() + ", " + employeeList.at(i).getFirstName());
}
}
}
employeeList - это вектор типа employee, который является классом, который я создал.он содержит их имя, рейтинг и т. д. (все строки QStrings и целые)
Когда вы нажимаете на qlistwidget, кнопка удаления становится активной.При нажатии на кнопку удаления выбранный сотрудник будет удален.Это прекрасно работает, пока у вас не останется 1 человек, в котором происходит сбой, с сообщением «Программа неожиданно завершена».Я пробовал много разных форм удаления.Никто не работал.
Любая помощь очень ценится, спасибо!