在 qt 中,我使用 tablewidget 来存储 100 行。起初,我新建 tableWidgetItems 来填充行。在它运行时,我设置了项目的属性,不再是“新的”。但是我在使用'ui->tableWidget->setRowCount(index);'后发现 ,后来又设置回100,代码“ui->tableWidget->item(index, 0)->setText(...);” 会使程序崩溃。那太糟糕了!!!;(我调试并发现新的索引>索引设置为行计数之前'设置回100'。
当我设置较小的行数时系统是否自动删除了表项???
我非常担心这一点,因为即使我的代码也无法确定我创建的对象的生命周期......有谁知道在设置行数后如何让它们保持“活动”?(否则,我必须更新它们......)。我真的很感谢你耐心阅读我可怜的 ELis :)
新的:
//TABLE
ui->tableWidget->setColumnCount(3);
ui->tableWidget->setRowCount(100);
ui->tableWidget->setHorizontalHeaderLabels(headers);
for(int i = 0; i < 100; i++)//new
{
ui->tableWidget->setItem( i, 0 , new QTableWidgetItem(""));//time
ui->tableWidget->setItem( i, 1 , new QTableWidgetItem(""));//name
ui->tableWidget->setItem( i, 2 , new QTableWidgetItem(""));//BITS
}
仅相关代码行:
{
int index = 0;
for(int queue_i = size_1; queue_i >= 0; queue_i--)
{
if(logDisplayQueue.at(queue_i).at(3) == "0" || logDisplayQueue.at(queue_i).at(3) == "2")continue;
QStringList BITList = bits2Hexs(queue_i);
ui->tableWidget->item(index, 0)->setText(logDisplayQueue.at(queue_i).at(0));//time
ui->tableWidget->item(index, 1)->setText(logDisplayQueue.at(queue_i).at(1));//name
ui->tableWidget->item(index, 2)->setText(BITList.join(""));//BITS
if(queue_i == oldRowItemNo)ui->tableWidget->selectRow(index);
index++;
}
ui->tableWidget->setRowCount(index);//set row count to be 30 more or less
}
另一个功能:
{
ui->tableWidget->setRowCount(100);//back to be 100 again
for(int queue_i = size_1, index = 0; queue_i >= 0; queue_i--, index++)
{
QStringList BITList = bits2Hexs(queue_i);
ui->tableWidget->item(index, 0)->setText(logDisplayQueue.at(queue_i).at(0));//time
ui->tableWidget->item(index, 1)->setText(logDisplayQueue.at(queue_i).at(1));//name
ui->tableWidget->item(index, 2)->setText(BITList.join(""));//BITS
//In debugging, when index reches the value of old row-count, "->setText" crashes the //program.
if(queue_i == oldRowItemNo)ui->tableWidget->selectRow(index);
}
}
运行时返回类似“指令 0x00421727 引用 0x00000000 内存,内存不能被‘读取’”的信息
如果我注释掉这一行:'ui->tableWidget->setRowCount(index);//将行数设置为 30 或多或少',它运行良好而不会崩溃,并且 index-referred-row 之后的行显示相同的数据前。