像QStringListModel一样使用QStandardItemModel

时间:2011-12-18 15:04:30

标签: qt qt4

我正在尝试使用QStandardItemModel来执行与QStringListModel相同的操作(仅用于练习):

http://programmingexamples.net/wiki/Qt/ModelView/StandardItemModel

然而,一个单元格显示,但它是空的,而不是像我期望的那样包含“文本”。有谁能解释一下?这是使用QStandardItemModel的正确方法(即构建QStandardItems并将它们提供给模型吗?)

1 个答案:

答案 0 :(得分:3)

实际上,我很惊讶你没有崩溃。您正在堆栈上创建item0,然后将指针传递给QList。当该方法离开范围时,item0将被删除,并且您的列表包含指向使用以保存QStandardItem的内存腐烂区域的指针。

{
  QStandardItem item0("test");
  QList<QStandardItem*> items;
  items.insert(0, &item0);  // Doesn't transfer ownership
  model->appendRow (items);
}  // Out of scope! Oh no!

通常您只需创建新项目,然后使用类似QStandardItemModel::setItem的内容添加它,如下所示:

QStandardItem *item0 = new QStandardItem("test");
model->setItem(0, 0, item);  // transfers ownership of item0 to the model