Поиск:

Ответ в темуСоздание новой темы Создание опроса
> пример добавления,удаления узлов в TreeView 
:(
    Опции темы
becks
Дата 21.5.2012, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 165
Регистрация: 6.7.2010

Репутация: нет
Всего: нет



Добрый день, коллеги, есть задача красиво отображать данные в виде дерева (если конкретно, то у каждого узла должна быть иконка и текст). Так же необходимо иметь возможность добавлять узлы на всех уровнях дерева, удалять узлы (и если это не лист, то удаляется вся ветка, находящаяся ниже узла),  редактировать узлы (менять текст узла и может быть иконку). В принципе все.

1) Подскажите, подойдет ли мне QTreeWidget или все же тут надо свою модель описывать и использовать QTreeView?
2) Хотелось бы увидеть простой примерчик подобной задачи (QTreeView + QStandardItemModel) , что-то нигде ничего подобного не нашел. Буду очень благодарен.

Спасибо.
PM MAIL   Вверх
_GRIN_
Дата 21.5.2012, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


одинокий падаван
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 18.11.2007
Где: Калуга

Репутация: 6
Всего: 7



Цитата(becks @  21.5.2012,  09:25 Найти цитируемый пост)
1) Подскажите, подойдет ли мне QTreeWidget или все же тут надо свою модель описывать и использовать QTreeView?


QTreeWidget - это по сути обёртка над QTreeView + QStandardItemModel =).

Цитата(becks @  21.5.2012,  09:25 Найти цитируемый пост)
удалять узлы (и если это не лист, то удаляется вся ветка, находящаяся ниже узла)

Когда удаляешь QStandardItem он удаляет все свои чайлды (аналогично для QTreeWidgetItem).

Цитата(becks @  21.5.2012,  09:25 Найти цитируемый пост)
у каждого узла должна быть иконка и текст

http://qt-project.org/doc/qt-4.8/qstandarditem.html#setIcon
http://qt-project.org/doc/qt-4.8/qstandarditem.html#setText

Цитата(becks @  21.5.2012,  09:25 Найти цитируемый пост)
2) Хотелось бы увидеть простой примерчик подобной задачи (QTreeView + QStandardItemModel) , что-то нигде ничего подобного не нашел. Буду очень благодарен.

Тут вообщем суть в том, что все манипуляции ты производишь в модели - а вью тебе пофиг - тролли за тебя уже позаботились, что бы вью модель адекватно отобразил.
взять корневой айтем: http://qt-project.org/doc/qt-4.8/qstandard...visibleRootItem
добавление новых строк (в строке может быть несколько полей) к айтему (узлу): http://qt-project.org/doc/qt-4.8/qstandard....html#appendRow
удаление из узла айтема (который в свою очередь тоже может быть узлом: http://qt-project.org/doc/qt-4.8/qstandard....html#removeRow

Корневой айтем можно и не брать а использовать обёртки: void QStandardItemModel::appendRow ( const QList<QStandardItem *> & items ) и тому подобные, которые внутри всё равно через корневой айтем работают.

P.S. Пример писать лень =). Из личного опыта советую всё-таки использовать вью+модель, а не виджет.

Это сообщение отредактировал(а) _GRIN_ - 21.5.2012, 22:46


--------------------
Дорогу осилит идущий
PM MAIL Skype   Вверх
math64
Дата 22.5.2012, 07:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 23
Всего: 72



Если дерево большое - лучше написать свою модель, стандартная будет работать медленно.
При использовании QTreeWidget в дизайнере его можно заполнить содержимым (в том числе иконки, всплывающие подсказки и т.п.). Посмотрев на сгенерерованный uic код, можно увидеть, как добавлять новые узлы.
PM   Вверх
borisbn
Дата 22.5.2012, 08:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Цитата(_GRIN_ @  21.5.2012,  22:43 Найти цитируемый пост)
Из личного опыта советую всё-таки использовать вью+модель, а не виджет.

Цитата(math64 @  22.5.2012,  07:10 Найти цитируемый пост)
лучше написать свою модель

ну... можно и я проголосую за вью и модель, вместо стандартного виджета ?  smile 

becks, даже если сейчас тебя удовлетворяет виджет, то завтра (поверь опыту) тебе потребуется что-то такое, что гораздо удобнее сделать через модель (например, подкрасить фон для строк, удовлетворяющих какому-либо условию - отрицательный баланс или ещё что-то в этом роде)


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
becks
Дата 22.5.2012, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 165
Регистрация: 6.7.2010

Репутация: нет
Всего: нет



Всем большое спасибо за помощь! Так и поступлю  вью + модель, тем более за вчерашний день немного знания прокачал.

Подскажите еще по такому вопросу.

В зависимости от значения QComboBox  создавать в QGroupBox динамически некоторые виджеты (QLineEdit, QLabel). Добавляю их в layot, у QGroupBox устанавливаю этот layot.

Код

void entity_Dialog::on_entity_comboBox_currentIndexChanged(int index)
{
   QVBoxLayout *layot = new QVBoxLayout;

   if (index == 0)
      layot->addWidget(namelbl);
   else if ()
      layot->addWidget(nameedit);

   ui->groupBox->setLayout(layot);
}



Как при изменении значения QComboBox грамотно почистить layot у QGroupBox.
Спасибо.
PM MAIL   Вверх
borisbn
Дата 22.5.2012, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



becks, нечестно так поступать с теми, кто в дальнейшем будет искать про layout'ы и удаление из них widget'ов:
найдя эту тему, они увидят, что тема про model/view и пойдут дальше.
Намёк понял  smile  ?
в правилах форума не зря сказано: один вопрос - одна тема


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
becks
Дата 22.5.2012, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 165
Регистрация: 6.7.2010

Репутация: нет
Всего: нет



Цитата(borisbn @ 22.5.2012,  11:42)
becks, нечестно так поступать с теми, кто в дальнейшем будет искать про layout'ы и удаление из них widget'ов:
найдя эту тему, они увидят, что тема про model/view и пойдут дальше.
Намёк понял  smile  ?
в правилах форума не зря сказано: один вопрос - одна тема

Намек понят ) Тема создана, кидаю ссылку для тех кто сюда заскочит.

http://forum.vingrad.ru/forum/act-ST/f-466...7/unread-1.html

borisbn прошу в по новой теме подсказать!)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0499 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.