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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Изменение итемов виджета дерева.  (Прочитано 14011 раз)
Zerkin
Чайник
*
Offline Offline

Сообщений: 98


Просмотр профиля
« Ответ #15 : Декабрь 16, 2010, 13:52 »

О спасибо, странно, но в ассистенте в описании QTreeWidget этого нету, поэтому и обратился к вам.


update. А ну понятно, надо было искать в QTreeView =)
Записан
Zerkin
Чайник
*
Offline Offline

Сообщений: 98


Просмотр профиля
« Ответ #16 : Январь 11, 2011, 17:20 »

Созрел вопрос.
Нужно по клику на кнопку вызвать слот которому передаётся параметр. Ясно, что clicked() не передаёт никаких параметров, как следствие ничерта не работает, как такие проблемы решают люди с прямыми руками? Или мне всё-таки надо как-то заморачиваться с QSignalMapper? Убрав параметр всё прекрасно заработает, оно и ясно, но у меня задачка с рекурсией и без параметра в слоте ну никак.

p.s. Просто нужно отметить сразу все листы в дереве.
« Последнее редактирование: Январь 11, 2011, 17:22 от Zerkin » Записан
Zerkin
Чайник
*
Offline Offline

Сообщений: 98


Просмотр профиля
« Ответ #17 : Январь 12, 2011, 14:29 »

Короче говоря, так как никто не ответил, к сожалению , то сделал через слот-посредник, в котором вызываю метод обработки. Как близко это к "хорошему стилю" не знаю.
« Последнее редактирование: Январь 12, 2011, 14:42 от Zerkin » Записан
twp
Гость
« Ответ #18 : Январь 12, 2011, 16:13 »

Естественно, что параметр передавать нельзя. Не уверен подойтет ли это решение, но можно узнать кто был источником сигнала вызвав в слоте метод sender()
Это даст возможность правильно обработать нажатие кнопки при наличии нескольких источников сигнал сконекченных к одному слоту.
Записан
Zerkin
Чайник
*
Offline Offline

Сообщений: 98


Просмотр профиля
« Ответ #19 : Январь 17, 2011, 13:26 »

Подскажите, а можно без рекурсии как-то отметить листы? С итераторами не знаком, но, вроде как, это логичный путь решения проблемы, нет?
« Последнее редактирование: Январь 17, 2011, 13:40 от Zerkin » Записан
Zerkin
Чайник
*
Offline Offline

Сообщений: 98


Просмотр профиля
« Ответ #20 : Январь 17, 2011, 13:40 »

Если у кого-нибудь есть возможность, то я просил бы показать на примере использование этого итератора.
Родина вас не забудет.  Подмигивающий
Записан
twp
Гость
« Ответ #21 : Январь 17, 2011, 14:10 »

если используется QTreeWidget то это делается очень используя QTreeWidgetItem, в частности что-то типа такого:
Код:
    QTreeWidgetItem *item = treeWidget->currentItem();
    for (int i = 0; i < item->childCount(); ++i) {
        QTreeWidgetItem *child = item->child(i);
        child->setCheckState(column, Qt::Checked);
    }
Записан
Zerkin
Чайник
*
Offline Offline

Сообщений: 98


Просмотр профиля
« Ответ #22 : Январь 17, 2011, 14:29 »

Он и используется. Делал примерно так же, но напрашивалась рекурсия, так как количество чайлдов у элементов могло быть разное, и нужно было у каждого идти до конца, то есть до листа. Собственно захотелось сделать без рекурсии, а это, как я понял, через итератор можно реализовать.
Записан
twp
Гость
« Ответ #23 : Январь 17, 2011, 14:42 »

ну тогда заюзать QTreeWidgetItemIterator
Записан
Zerkin
Чайник
*
Offline Offline

Сообщений: 98


Просмотр профиля
« Ответ #24 : Январь 17, 2011, 14:48 »

Ну так я про это и говорил 3 сообщениями выше =)
Показал бы кто как им правильно воспользоваться.
« Последнее редактирование: Январь 17, 2011, 14:50 от Zerkin » Записан
twp
Гость
« Ответ #25 : Январь 17, 2011, 16:37 »

сорри, затупил. собственно вот пример из асистента:
Код:
     QTreeWidgetItemIterator it(treeWidget);
     while (*it) {
         if ((*it)->text(0) == itemText)
             (*it)->setSelected(true);
         ++it;
     }
по ходу нужно только поставить нужный метод и возможно с флагами поиграть. я так понимаю что не правильно обходит листья дерева?
Записан
Zerkin
Чайник
*
Offline Offline

Сообщений: 98


Просмотр профиля
« Ответ #26 : Январь 18, 2011, 10:29 »

Напрашивает "Ой", спасибо большое, смотрел в ассистенте про итератор, но совсем не заметил, что там был пример.
Итератор отличная штука, намного удобнее  рекурсии для моей задачи.

В Итоге получилось следующее:
Код:
    QTreeWidgetItemIterator it(signalTree);
    while (*it)
    {
         if ((*it)->child(0) == 0)
          {
              (*it)->setFlags(item->flags()|Qt::ItemIsUserCheckable);
     (*it)->setCheckState(0,Qt::Checked);
 }
         ++it;
     }
Записан
Zerkin
Чайник
*
Offline Offline

Сообщений: 98


Просмотр профиля
« Ответ #27 : Март 22, 2011, 18:12 »

Никто не подскажет, как в итоге можно индексировано ползать по элементам дерева?
« Последнее редактирование: Март 22, 2011, 18:30 от Zerkin » Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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