Сбой программы QT после удаления последнего объекта из вектора - PullRequest
0 голосов
/ 01 июня 2019

У меня есть заявление, которое я делаю для своей работы.Это в основном принимает сотрудников и их доступность и составляет график.Помимо этого, у меня есть страница под названием «Редактировать сотрудника», на которой я могу редактировать информацию любого сотрудника.У меня есть кнопка «удалить», в которой, когда вы нажимаете ее, вы получаете текущую строку из 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 человек, в котором происходит сбой, с сообщением «Программа неожиданно завершена».Я пробовал много разных форм удаления.Никто не работал.

Любая помощь очень ценится, спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...