我正在使用QStandardItemModel
和QTreeView
,我希望左窗格显示节点,右窗格显示节点的值,即第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不会展开。
答案 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);
}