コード:
populateTable()
{
tableWidget->clearContents();
tableWidget->setRowCount(stringList.size());
for(int i = 0; i < stringList.size(); ++i)
{
tableWidget->setItem(i, 0, new QTableWidgetItem(stringList.at(i)));
}
}
問題:
初めてpopulateTable()を実行するときは、すべて問題ありません。しかし、次の結果として、以前よりも実行速度が大幅に低下します。
討論:
注意深くテストした結果、clearContents()が問題であると思われます。単にコードをから変更するため
tableWidget->clearContents();
に:
tableWidget->setRowCount(0);
問題は修正されますが、今では別の問題が発生します。行数を「0」に設定しても、ヒープに割り当てられたQTableWidgetItemsは削除されないようです。アイテムの所有権が残っているように見えるため、メモリリークが残ります。(または少なくとも私はそう思う...)
QTableWidgetのQtのドキュメントはかなりあいまいなので、clearContents()が実際に何をするのか正確にはわかりません。ドキュメントでは、「ヘッダーにないすべてのアイテムをビューから削除する」と書かれているので、テーブルの内容は非表示になりますか?削除されますか?よくわかりません。私の理論では、clearContents()はアイテムのみを非表示にし、テーブルにデータを入力しようとすると、実際には各アイテムが削除および削除され、新しいアイテムがテーブルに割り当てられます。これはコストのかかる操作です。
もう1つの興味深い点は、QTableWidgetに関するQtのドキュメントでは、QTableWidgetにデータを設定する適切な方法は、QTableWidgetItemをヒープに割り当ててから、上記のコードで示したように、setItem()を使用してテーブルセルに設定することです。奇妙な...
要約すれば:
これらの問題をすべて発生させることなく、Qtテーブルにデータを入力して再入力する別の方法はありますか?そうでない場合、これらの問題を修正する方法はありますか?