QTreeView多列,可能吗?

时间:2011-11-29 02:16:53

标签: qt4 qtreeview qt4.7

我正在使用QStandardItemModelQTreeView,我希望左窗格显示节点,右窗格显示节点的值,即第0列和第1列情况下。

节点的构建非常成功,但是当我尝试使用QStandardItem::insertRow(1, XX)将值放入该模型时,该项目根本没有显示,是否有我遗漏的内容?

@Update:

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

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

     parent->appendRow (childKey);

}

我不能只使用model.setItem()追加childValue,因为它会转到错误的行,并且默认情况下,当附加新节点时,QTreeView不会展开。

2 个答案:

答案 0 :(得分:5)

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

修改

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

  

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

答案 1 :(得分: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);

}