Доброго времени суток! Делаю вывод коллекции объектов в QTreeWidget (в виде дерева элементов, впоследствии это будет И-ИЛИ-дерево). Никак не получается сделать то, что я хочу. Сделал проще - вот так:
QTreeWidgetItem *a1 = new QTreeWidgetItem();
a1->setText(0, "One");
QTreeWidgetItem *a2 = new QTreeWidgetItem(a1);
a2->setText(0, "One_1");
QTreeWidgetItem *a3 = new QTreeWidgetItem(a2);
a3->setText(0, "One_2");
ui->treeWidget->insertTopLevelItem(0, a1);
ui->treeWidget->insertTopLevelItem(0, a2);
ui->treeWidget->insertTopLevelItem(0, a3);
Здесь получается так, как я хочу. А теперь мой код:
void MainWindow::on_buildTreeButton_clicked()
{
QList<TreeItem *> *treeItems = new QList<TreeItem *>;
// QList<QTreeWidgetItem *> *visualItems = new QList<QTreeWidgetItem *>;
TreeItem *mainItem = new TreeItem();
mainItem->setTitle("itm0");
mainItem->setLevel(0);
TreeItem *first = new TreeItem();
first->setTitle("itm0_1");
first->setParent(mainItem);
first->setLevel(1);
treeItems->append(first);
TreeItem *second = new TreeItem();
second->setTitle("itm0_2");
second->setParent(mainItem);
second->setLevel(1);
treeItems->append(second);
TreeItem *third = new TreeItem();
third->setTitle("itm1_1");
third->setParent(first);
third->setLevel(2);
treeItems->append(third);
QTreeWidgetItem *mainVisItem = new QTreeWidgetItem(ui->treeWidget); // вывод главного элемента
mainVisItem->setText(0, mainItem->title());
qDebug() << treeItems->size();
TreeItem *elem;
foreach (elem, *treeItems) {
QTreeWidgetItem *visualItemParent = new QTreeWidgetItem();
visualItemParent->setText(0, elem->parent()->title());
QTreeWidgetItem *visualItem = new QTreeWidgetItem(visualItemParent);
qDebug() << elem->title();
visualItem->setText(0, elem->title());
ui->treeWidget->insertTopLevelItem(0, visualItem);
}
}
Код класса TreeItem:
#ifndef TREEITEM_H
#define TREEITEM_H
#include <QString>
class TreeItem
{
public:
TreeItem();
void setTitle(QString title);
void setParent(TreeItem *parent);
void setLevel(int level);
QString title() const;
TreeItem *parent() const;
int level() const;
private:
QString m_title;
TreeItem *m_parent;
int m_level;
};
#endif // TREEITEM_H
#include "treeitem.h"
TreeItem::TreeItem()
{
}
void TreeItem::setTitle(QString title)
{
m_title = title;
}
void TreeItem::setParent(TreeItem *parent)
{
m_parent = parent;
}
QString TreeItem::title() const
{
return m_title;
}
TreeItem* TreeItem::parent() const
{
return m_parent;
}
int TreeItem::level() const
{
return m_level;
}
void TreeItem::setLevel(int level)
{
m_level = level;
}
Подскажите, где я напорол.