crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Работа с деревом - отметка узлов и листьев, Есть ли примеры работы с этим?
AD
  опции профиля:
сообщение 24.2.2009, 16:34
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Есть ли пример, где можно увидеть, как правильно отмечать узлы и листья дерева. Что-то мой код работает не так, как я хотел бы. Вроде бы такая вещь стандартна и, наверняка, подобные вещи уже делали. Можно ли где-нибудь посмотреть?
Вот мой самописный код, который работает не совсем так, как положено:
/// где - то
connect(treePhaseView, SIGNAL(itemPressed(QTreeWidgetItem*, int)), this,
        SLOT(treeItemPress(QTreeWidgetItem*, int)));


/// Нажатие на элемент дерева
void TLV::treeItemPress(QTreeWidgetItem* item, int column)
{
    if(item == 0) return;
    for(register int i=0; i<item -> childCount(); ++i)
    {
        QTreeWidgetItem* childItem = item -> child(i);
        if(childItem == 0) continue;
        Qt::CheckState check = (childItem -> checkState(column) == 2 || childItem -> checkState(column) == 1) ?
            Qt::Unchecked : Qt::Checked;
        childItem -> setCheckState(column, check);
        treeItemPress(childItem, column);
    }
    QTreeWidgetItem* parentItem = item -> parent();
    if(parentItem == 0) return;
    Qt::CheckState check = (parentItem -> checkState(column) == 2 || parentItem -> checkState(column) == 1) ?
            Qt::Unchecked : Qt::Checked;
    parentItem -> setCheckState(column, check);
}


Вот рисунок дерева. Есть желание сделать стандартно: т.е. если все листья не отмечены, то и узел не отмечен, если отмечен узел, то какой-то из листьев является отмеченным. Если пользователь отмечает узел, то отмечаются все листья этого узла.
Вот рисунок дерева:
[attachment=441:tree_widget.JPG]


Поможете сделать этот алгоритм? Или подскажите, где его можно найти?

Да и еще одно: в дереве возможно только три степени вложенности, как показано на рисунке....

Сообщение отредактировал AD - 24.2.2009, 16:32
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Тема закрытаНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.4.2024, 21:48