QTWidgets QTableWidget因segfault而崩溃
QTWidgets QTableWidget crash with segfault
我在QPushButton上有这个信号:
void MainWindow::on_addNode_clicked()
{
ui->nodesTable->insertRow(ui->nodesTable->rowCount());
if(ui->nodesTable->rowCount()>1)
{
ui->nodesTable->item(ui->nodesTable->rowCount()-1, 0)->setText(ui->nodesTable->item(ui->nodesTable->rowCount()-2,0)->text());
}
else
{
ui->nodesTable->item(ui->nodesTable->rowCount()-1, 0)->setText(QString::fromStdString("0"));
}
}
但每次我点击按钮时,它都会因分割错误而崩溃。正如我所理解的,项(…)给出了nullptr,但为什么?
由于您没有指定行数和列数,QTableWidget
以0行0列开始,添加1行仍然会留下0列。
此外,您必须先通过setItem
创建项目,然后才能通过item
访问它们
请查看文档中的概述。
另请注意:
在if (ui->nodesTable->rowCount() > 1)
的else
分支中rowCount() == 0
,因此您访问了超出界限的ui->nodesTable->item(-1, 0)
。
当您的表中第一次没有项时,如果指针指向非并且您想要访问它,那么您的应用程序就会崩溃!
试试这个;
void MainWindow::on_addNode_clicked()
{
ui->nodesTable->insertRow(ui->nodesTable->rowCount());
if( !ui->nodesTable->rowCount() )
{
ui->nodesTable->item(ui->nodesTable->rowCount()-1, 0)->setText(ui->nodesTable->item(ui->nodesTable->rowCount()-2,0)->text());
}
else
{
ui->nodesTable->setItem(0, 0,new QTableWidgetItem(QString("New Item")));
}
}
您必须设置列计数,并且必须手动设置项:
ui->nodesTable->setColumnCount(1);
ui->nodesTable->insertRow(ui->nodesTable->rowCount());
ui->nodesTable->setItem(ui->nodesTable->rowCount()-1, 0, new QTableWidgetItem("0") );
if(ui->nodesTable->rowCount()>1)
{
ui->nodesTable->item(ui->nodesTable->rowCount()-1, 0)->setText(ui->nodesTable->item(ui->nodesTable->rowCount()-2,0)->text());
}
else
{
ui->nodesTable->item(ui->nodesTable->rowCount()-1, 0)->setText(QString::fromStdString("0"));
}
相关文章:
- 当回溯以零开始时,如何调试崩溃
- C++中带有List类的迭代器Segfault
- 内联映射初始化的动态atexit析构函数崩溃
- 执行函数时导致崩溃的变量
- 程序崩溃并显示"std::out_of_range"错误
- CoInitialize()在单独的线程上崩溃而不返回
- 使用调试/崩溃报告将应用程序部署到客户端
- 使用Vulkan hpp vk::enumerateInstanceVersion()会导致segfault
- 为什么所有C++编译器都会崩溃或挂起此代码
- 为什么lambda在clang上崩溃而不是在gcc上崩溃
- 为什么我的多线程作业队列崩溃
- ExtractIconEx:可以工作,但偶尔会崩溃
- 为什么引用传递会导致此崩溃(C++)
- 试图创建流或fopen时程序崩溃
- 类对象数组的问题会导致崩溃
- 排序时无法执行交换操作.我做的时候它会崩溃.为什么
- QTWidgets QTableWidget因segfault而崩溃
- QListWidget.takeItem因segfault而崩溃
- 对于循环崩溃..segFault c++
- glewInit()在创建osmesa(屏幕外台面)上下文后崩溃(segfault)