Russian Qt Forum
Сентябрь 30, 2024, 16:20 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите пожалуста с QTree.  (Прочитано 5392 раз)
melana
Гость
« : Март 30, 2009, 18:20 »

у меня с файла читается ID, ID_parent, name и свойства элемента. не могу построить дерево. не знаю как определять предка. Создаю тока корни. 
Записан
spirit
Гость
« Ответ #1 : Март 30, 2009, 18:27 »

создаете рута (QTreeWidgetItem), а затем при помощи QTreeWidgetItem::addChildren добавляте потомков.
или сложность в чем-то другом?  Непонимающий
Записан
melana
Гость
« Ответ #2 : Март 30, 2009, 18:30 »

у меня файле только int. как по нему определить предка? искать по всему дереву?
Записан
spirit
Гость
« Ответ #3 : Март 30, 2009, 18:36 »

че-то вообще вопрос не догоняю, что нужно сделать: построить GUI дерево?
Записан
melana
Гость
« Ответ #4 : Март 30, 2009, 18:43 »

Построить дерево читая данные из файла :(ID    ID_parent    name)
1   0   имя1
2   1   имя2
3   1    имя3
4    2   имя4 и т.д. в дереве тока имя элемента отображать
Записан
spirit
Гость
« Ответ #5 : Март 30, 2009, 18:48 »

читать файл построчно.
берем первый парент и получаем все его чилды.
строим GUI айетеимы.
Записан
melana
Гость
« Ответ #6 : Март 30, 2009, 18:51 »

я читаю с файла и все в структуру пишу, но как Item создать не догонаю. тока с parent = 0 могу создать
Записан
spirit
Гость
« Ответ #7 : Март 30, 2009, 18:59 »

так должно работать
Код
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);
 }
}
 
« Последнее редактирование: Март 30, 2009, 19:01 от spirit » Записан
melana
Гость
« Ответ #8 : Март 30, 2009, 19:09 »

спасибо.попробую. но че то я не до конца поняла for (int c = 0; c < children.size(); ++c)  для чего это?
Записан
spirit
Гость
« Ответ #9 : Март 30, 2009, 19:10 »

это дети рута.
Записан
Rcus
Гость
« Ответ #10 : Март 30, 2009, 19:15 »

А еще возможно подойдет такой способ:
Код
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);
       }
   }
}
 
Записан
melana
Гость
« Ответ #11 : Март 30, 2009, 19:48 »

Спасибки БОЛЬШОЕ попробую, теперь поняла как с QTree работать Веселый  Веселый  Веселый
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.266 секунд. Запросов: 21.