在qt中,我使用tablewidget存储100行。首先,我新建tableWidgetItems来填充行。 在运行时,我设置了项目的属性而不再是'新'。 但我发现在使用'ui-> tableWidget-> setRowCount(index);',然后又设置回100,代码“ui-> tableWidget-> item(index,0) - > setText(...);“将使程序崩溃。那太糟糕了! ( 我调试并找到新索引> index设置为'设置回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-&gt; tableWidget-&gt; setRowCount(index); //将行数设置为30或更少',它运行良好而不会崩溃,并且在index-referenced-row之后的行显示与之前相同的数据。
答案 0 :(得分:3)
setRowCount
确保表格恰好包含许多行。如果之前有比index
更多的行,那么这些行就会消失(删除)。
如果您想暂时隐藏行,则应该使用hideRow(int)
/ showRow
而不是重置行数。