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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как в QTreeWidget редактировать конкретный item, не зная его индекс?  (Прочитано 5658 раз)
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« : Апрель 08, 2015, 14:59 »

Здравствуйте, заинтересовал такой вопрос. Как в QTreeWidget редактировать конкретный item, не зная его индекс? Нет ли qt-ой функции для изменение одного item-а другим (чтобы не требовала указывать индекс)?  Также интересует вопросы: как удалять конкретный item? как добавлять item в конец? Просто нахожу в qt только подобные функции, где в качестве параметров задаются индекс и сам item.
Записан
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« Ответ #1 : Апрель 08, 2015, 15:05 »

Ах да, так же интересует вопрос: "Как добавить item в QTreeWidget после конкретного item-а, не зная индекс второго?".
Записан
Zerkin
Чайник
*
Offline Offline

Сообщений: 98


Просмотр профиля
« Ответ #2 : Апрель 08, 2015, 16:01 »

Конкретизируйте ситуацию, из-за которой вы не знаете индекс уже присутствующего элемента в дереве. Мне кажется это странным.  Непонимающий
Записан
Zerkin
Чайник
*
Offline Offline

Сообщений: 98


Просмотр профиля
« Ответ #3 : Апрель 08, 2015, 16:06 »

Здравствуйте, заинтересовал такой вопрос. Как в QTreeWidget редактировать конкретный item, не зная его индекс? Нет ли qt-ой функции для изменение одного item-а другим (чтобы не требовала указывать индекс)?  Также интересует вопросы: как удалять конкретный item? как добавлять item в конец? Просто нахожу в qt только подобные функции, где в качестве параметров задаются индекс и сам item.

У стандартного QTreeWidgetItem'a нету методов для работы с сиблингами, только с чайлдами. Но всё возможно сделать через parent'ов и topLevelItems. У самого QTreeWidget есть следующие механизмы, с помощью которых можно к элементам обратиться:
Код
C++ (Qt)
QTreeWidgetItem * itemAbove ( const QTreeWidgetItem * item ) const
QTreeWidgetItem * itemAt ( const QPoint & p ) const
QTreeWidgetItem * itemAt ( int x, int y ) const
QTreeWidgetItem * itemBelow ( const QTreeWidgetItem * item ) const
QTreeWidgetItem * topLevelItem ( int index ) const
QList<QTreeWidgetItem *> selectedItems () const
QTreeWidgetItem * currentItem () const
 
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #4 : Апрель 08, 2015, 16:18 »

Как в QTreeWidget редактировать конкретный item, не зная его индекс?
http://doc.qt.io/qt-4.8/qtreewidget.html#editItem

Нет ли qt-ой функции для изменение одного item-а другим (чтобы не требовала указывать индекс)?
Что вы подразумеваете?

как удалять конкретный item?
Набросал в браузере алгоритм:
Код
C++ (Qt)
QTreeWidgetItem * parent = item->parent();
if (parent)
   parent->removeChild(item);
else {
   int i = tree->indexOfTopLevelItem(item);
   delete tree->takeTopLevelItem(i);
}
 

как добавлять item в конец?
Набросал в браузере алгоритм:
Код
C++ (Qt)
QTreeWidgetItem * parent = item->parent();
if (parent)
   parent->addChild(item);
else
   tree->addTopLevelItem(item);
 

Цитата: billy4685
Ах да, так же интересует вопрос: "Как добавить item в QTreeWidget после конкретного item-а, не зная индекс второго?".
Так же как и добавление в конец, но используйте функцию insert* как найти индекс элемента вы знаете
« Последнее редактирование: Апрель 08, 2015, 16:20 от gil9red » Записан

billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« Ответ #5 : Апрель 08, 2015, 16:39 »

Конкретизируйте ситуацию, из-за которой вы не знаете индекс уже присутствующего элемента в дереве. Мне кажется это странным.  Непонимающий
Да просто переписываю прогу со среды Photon Application Builder на Qt. А там как раз в PtTree (аналог QTreeWidget) при добавлении, удалении, редактировании PtTreeItem (аналог QTreeWidgetItem) требует item. Ну вот к примеру некоторые из методов из Photon:
1. Создание нового item-а (здесь wgt_tree - PtTree; str - char*; attr - PtTreeAttribute_t - атрибуты для  PtTree;):
Код:
PtTreeItem_t *new_item;
new_item = PtTreeCreateItem(wgt_tree, str,  attr);
2. Добавить item после(здесь wgt_tree - PtTree; item - тот что добавляем; brother - тот item после которого добавляем;):
Код:
PtTreeAddAfter(wgt_tree, item, brother); 
3. Добавить первый item(здесь wgt_tree - PtTree; item - тот что добавляем; brother - в даном случае будет родительским;):
Код:
PtTreeAddFirst(wgt_tree, item, brother);
4. Удаление item-a(здесь wgt_tree - PtTree; item - тот что который  хотим удалить;):
Код:
PtTreeRemoveItem(wgt_tree, item);
3. Изменить item (здесь wgt_tree - PtTree; str - char*; item - тот который хотим изменить; attr - PtTreeAttribute_t - атрибуты для attr):
Код:
 PtTreeChangeItem(wgt_tree , item, str,  attr);
Вот и думаю как подобные методы реализовать в Qt, так как я уже говорил, находил только те, которые требуют задавать item и его индекс.
Записан
Zerkin
Чайник
*
Offline Offline

Сообщений: 98


Просмотр профиля
« Ответ #6 : Апрель 08, 2015, 16:42 »

gil9red вам, в принципе, описал как всё это реализовать. Смотрите parent и topLevelItem.
Записан
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« Ответ #7 : Апрель 08, 2015, 16:44 »

gil9red вам, в принципе, описал как всё это реализовать. Смотрите parent и topLevelItem.
gil9red, огромное спасибо) просто писал последнее сообщение) и увидел Ваше, уже после того как отправил. Буду реализовывать.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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