QTreeView несколько столбцов, возможно? - PullRequest
3 голосов
/ 29 ноября 2011

Я использую 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 не раскрывается по умолчанию при добавлении нового узла.

Ответы [ 2 ]

5 голосов
/ 29 ноября 2011

Проверьте свой код, чтобы убедиться, что вы сообщили модели, сколько столбцов вы хотите, то есть, что вы вызвали QStandardItemModel :: setColumnCount () , чтобы сообщить модели о дополнительных столбцах.

Редактировать

Затем необходимо установить значение каждого элемента в каждом столбце.Один из способов сделать это - использовать QStandardItemModel::setItem ( int row, int column, QStandardItem * item)

Устанавливает элемент для данной строки и столбца в элемент.Модель берет на себя владение предметом.При необходимости количество строк и столбцов увеличивается для соответствия элементу.Предыдущий элемент в указанном месте (если он был) удаляется.

2 голосов
/ 24 июня 2016

Вы можете добавить несколько столбцов одновременно к родительскому элементу для одного и того же дочернего узла следующим образом:

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);

}
...