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の後の行はと同じデータを表示します前。