C++ (Qt)class MyItem {public: MyItem(int id, const QString &name, MyItem *parent = 0);.... int id() const; QString name() const; QList<MyItem *> children() const;...};...void MyWidget::buildTree() { QList<MyItem *> roots = items();//метод возвращающий список ваших айтемов for (int i = 0; i < rootsCount; ++i) { const MyItem *myRoot = roots.at(i); QTreeWidgetItem *root = new QTreeWidgetItem(); root->setText(myRoot->name()); QList<MyItem *> children = myRoot->children(); for (int c = 0; c < children.size(); ++c) { const MyItem *myChild = children.at(c); QTreeWidgetItem *child = new QTreeWidgetItem(root); child->setText(myChild->name()); } tree->addTopLevelItem(root); }}
C++ (Qt)struct TreeData{ int id; int parentId; const char * const name;}; const TreeData treeData[] = {{1,0,"root"}, {2,1,"first child"}, {3,1,"second child"}, {4,2,"subchild"}}; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent){ QTreeWidget *tree = new QTreeWidget(this); setCentralWidget(tree); int itemCount = sizeof(treeData)/sizeof(TreeData); typedef QHash<int, QPair<int, QTreeWidgetItem *> > ItemHash; ItemHash itemHash; for (int i = 0; i < itemCount; ++i) { QTreeWidgetItem *item = new QTreeWidgetItem(QStringList(QString(treeData[i].name))); itemHash[treeData[i].id] = qMakePair(treeData[i].parentId,item); } for (ItemHash::iterator it = itemHash.begin(); it != itemHash.end(); ++it) { int parent = it.value().first; QTreeWidgetItem *item = it.value().second; if (itemHash.contains(parent)) { itemHash[parent].second->addChild(item); } else { tree->addTopLevelItem(item); } }}