c++ - Qt 程序在从向量中删除最后一个对象后崩溃
问题描述
我有一个我正在为我的工作制作的应用程序。它基本上考虑员工及其可用性并制定时间表。除此之外,我还有一个名为“编辑员工”的页面,我可以在其中编辑任何员工的信息。我有一个“删除”按钮,当您按下它时,您会从qlistwidget中获取当前行并删除该元素。一切正常,直到向量中只剩下一个元素。
我尝试过从向量中删除的不同形式。我尝试了 .clear()、.erase(vec.begin()、vec.end())、.erase(vec.begin() + position)等。
我还有一个显示向量内容的for循环,它只显示向量中的 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 类型的向量,它是我创建的一个类。它保存他们的名字、排名等(所有 QString 和整数)。
当您单击qlistwidget时,删除按钮将变为启用状态。当您单击删除按钮时,选定的员工将被删除。这工作得很好,直到你剩下 1 个人,其中它崩溃,说明“程序已意外完成”。我尝试了许多不同形式的删除。没有工作。
非常感谢任何帮助,谢谢!
解决方案
推荐阅读
- token - Azure Cosmos 主令牌过期
- python - 两个链表的总和 python --CTCI 的问题
- httprequest - 比特币 JSON-RPC API 方法 createrawtransaction 返回“无效金额”
- excel - 以编程方式删除所有数组公式
- interface - Hyperledger Fabric:如何使调用链码的应用程序和部署的链码保持同步?任何 ABI 等效功能?
- vue.js - Vuetify SASS 变量是否意味着像这样工作?
- mongodb - 如何从过滤mongodb中的嵌套数组中返回对象?
- debugging - 在 ios 上启动调试后的 Nativescript 调试控制台消息
- html - 如何在不同大小的 magins 中模仿 CSS flexbox 中的边距折叠?
- angular - ViewContainerRef 在访问 ng 模板时未定义