gpt4 book ai didi

c++ - 为什么在没有明显代码的情况下删除对象?

转载 作者:行者123 更新时间:2023-11-28 00:53:26 24 4
gpt4 key购买 nike

在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);
}

}

运行时返回类似'instruction 0x00421727 references to 0x00000000 memory, the memory cannot be 'read''的信息

如果我注释掉这一行:'ui->tableWidget->setRowCount(index);//将行数设置为 30 或多或少',它运行良好,没有崩溃,index-referred-row 之后的行显示与之前相同的数据。

最佳答案

setRowCount 确保表格恰好包含那么多行。如果您之前的行数多于 index,则这些行将消失(删除)。

如果你想暂时隐藏行,你应该使用hideRow(int)/showRow 而不是重置行数。

关于c++ - 为什么在没有明显代码的情况下删除对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12767635/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com