3

我正在使用QStandardItemModela QTreeView,我希望左窗格显示节点,右窗格显示节点的值,在本例中为第 0 列和第 1 列。

节点的构建非常成功,但是当我尝试使用 将值放入该模型时 QStandardItem::insertRow(1, XX),该项目根本没有出现,我错过了什么吗?

@更新:

由于我递归地创建节点,我使用:

void Widget::addNode(QStandardItem *parent, const QVariant & data)
{
     QStandardItem *childKey = ...; // left pane
     QStandardItem *childValue = ...; // right pane

     parent->appendRow (childKey);

}

我不能只使用model.setItem()to append childValue,因为它去了错误的 row ,并且 QTreeView 在添加新节点时默认不展开。

4

2 回答 2

5

检查您的代码以确保您已告诉模型您想要多少列,即您已调用QStandardItemModel::setColumnCount()来告诉模型有关额外列的信息。

编辑

然后你需要设置每列中每个项目的值。一种方法是使用 QStandardItemModel::setItem ( int row, int column, QStandardItem * item)

将给定行和列的项目设置为项目。模型拥有该项目的所有权。如有必要,将增加行数和列数以适合项目。删除给定位置的前一项(如果有的话)。

于 2011-11-29T06:05:40.577 回答
2

您可以一次将多个列添加到同一个子节点的父节点,如下所示:

void Widget::addNode(QStandardItem *parent, const QVariant & data)
{
     QStandardItem *childKey = ...; // left pane
     QStandardItem *childValue = ...; // right pane

     QList<QStandardItem*> childColumns;
     childColumns<< childKey << childValue;

     parent->appendRow(childColumns);

}
于 2016-06-24T10:46:02.317 回答