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

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

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

Сообщений: 98


Просмотр профиля
« : Октябрь 26, 2010, 09:56 »

Доброго времени суток.
 Просьба сразу не закидывать камнями, ибо мало того, что с Qt знаком буквально несколько дней, так и практических навыков программирования, отличных от хеллоуворлда, увы, но мало.
 Задача у меня следующая: Организуется определенное дерево, какое - не важно, суть в том, что у каждого итема дерева должна быть иконка и чекбокс (или какая-либо возможность их выделения близкая к чекбоксу, но первое предпочтительнее).
 С иконкой всё понятно - setIcon, а вот с чекбоксом я уже долго мучаюсь. Читал что-то про флаги, пытался разобраться с ItemIsUserCheckable, но ни к чему это меня не привело (итемы становятся просто заблоченные).
 Подскажите, как можно решить эту проблему стандартными списковыми средствами, с использованием возможностей QTreeWidgetItem? Или может быть выбор такой реализации заведомо ложный? Буду очень благодарен. Подмигивающий
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Октябрь 26, 2010, 10:00 »

Наверное перебил дефолтные флаги.
При заведении QTreeWidgetItem-а делай так

item->setFlags( item->flags() | Qt::ItemIsUserCheckable );
А уже после QTreeWidgetItem::setCheckState()
« Последнее редактирование: Октябрь 26, 2010, 10:02 от GreatSnake » Записан

Qt 5.11/4.8.7 (X11/Win)
Zerkin
Чайник
*
Offline Offline

Сообщений: 98


Просмотр профиля
« Ответ #2 : Октябрь 26, 2010, 10:13 »

Большое спасибо, всё получилось. Жутко стыдно, что сам до конца не разобрался.
Премного вам благодарен  Улыбающийся
Записан
Zerkin
Чайник
*
Offline Offline

Сообщений: 98


Просмотр профиля
« Ответ #3 : Октябрь 26, 2010, 10:32 »

Чтобы не создавать еще одну тему, добавлю вопрос здесь.
Подскажите общую идею как мне в этом же проекте реализовать такую вещь: нужно сохранять сформированную структуру дерева, чтобы при следующем запуске она у нас появлялась. Записывать в файл - это понятно, но вот пока не очень понял как саму структуру записать. Направьте правильной дорогой =)
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #4 : Октябрь 26, 2010, 10:39 »

QDataStream, QVariant, QSettings
Записан

Qt 5.11/4.8.7 (X11/Win)
BaltikS
Гость
« Ответ #5 : Октябрь 26, 2010, 10:41 »

Лучше XML
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #6 : Октябрь 26, 2010, 10:47 »

Согласен, особенно если, дерево большое.
QXmlStreamWriter/QXmlStreamReader.
Записан

Qt 5.11/4.8.7 (X11/Win)
Zerkin
Чайник
*
Offline Offline

Сообщений: 98


Просмотр профиля
« Ответ #7 : Октябрь 28, 2010, 11:26 »

назрел очередной вопрос.
Сейчас разбирался со слотами-сигналами и натолкнулся на следующую проблему:

написал метод по определенному добавлению чайлдов себе в дерево и связал с кнопкой на всплывающем диалоге:

в конструкторе класса
connect(dialog->okButton,SIGNAL(clicked()),this,SLOT(addItems(item)));

addItems собственно в паблик слотах. item определяется в конструкторе и не является членом моего конкретного класса-виджета. Таким образом добавляться не хочет ни при каком раскладе, но если переделать addItems без параметров (определяем item как член класса и в самом методе уже к нему обращаемся) всё работает. Не хочется превращать код в такую гадость, получается прям удаление гландов через одно место, да и универсализация вся потеряется сразу.

Наводит на мысль, что где-то не разобрался в самой системе слоты-сигналы. Что не так?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #8 : Октябрь 28, 2010, 11:39 »

Цитировать
Наводит на мысль, что где-то не разобрался в самой системе слоты-сигналы. Что не так?
Именно.
Сигнал clicked() испускает кнопка и она понятия не имеет что такое item.
Мало того такой connect() просто не отработает - если бы вы видели консоль, то наверняка увидели бы ругань.
Находите нужный вам item уже непосресдвенно в addItems() методе.
Записан

Qt 5.11/4.8.7 (X11/Win)
Zerkin
Чайник
*
Offline Offline

Сообщений: 98


Просмотр профиля
« Ответ #9 : Октябрь 28, 2010, 11:44 »

Находите нужный вам item уже непосресдвенно в addItems() методе.

Так, вот здесь я немного не понял. Т.е. сделать связь так, чтобы по клику обработка моим методом, которому в перпективе должен параметр передаваться, нереализуема?
Как понять, найти мой итем непосредственно в методе? Всё-таки обращаться из него к членам?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #10 : Октябрь 28, 2010, 12:03 »

Сначала внимательно почитайте это.
Ещё раз читаем внимательно:
Цитировать
Сигнал clicked() испускает кнопка и она понятия не имеет что такое item.
Записан

Qt 5.11/4.8.7 (X11/Win)
Zerkin
Чайник
*
Offline Offline

Сообщений: 98


Просмотр профиля
« Ответ #11 : Октябрь 29, 2010, 14:44 »

Вроде разобрался как смог.

Продолжая тему сохранения дерева:
Насчет xml, DOM или SAX? Что думаете?
Записан
Zerkin
Чайник
*
Offline Offline

Сообщений: 98


Просмотр профиля
« Ответ #12 : Ноябрь 12, 2010, 15:06 »

Всем доброго времени суток.
Появилась потребность в переделки всего под модель-представление.
Так как такая вещь явилась для меня полным откровением, то назрели первые вопросы.
От кого лучше наследоваться моей модели: QAbstractItemModel, QStandartItem модель или еще от чего?
Суть в том, что буду реализовывать индексацию в дереве по типу табличной (наводит на мысль тогда уж о QAbstractTableModel, но не уверен), но я так понял, что индексация здесь другой быть и не может. Или я ошибаюсь?  Может у кого был опыт в реализации похожих вещей, подскажите пожалуйста. И будет ли у меня возможность, переделывая в модель-представление, оставить все мои свистелки и перделки в виде иконок и чекбоксов?
« Последнее редактирование: Ноябрь 12, 2010, 15:12 от Zerkin » Записан
Zerkin
Чайник
*
Offline Offline

Сообщений: 98


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

Товарищи, а можно как-нибудь в QTreeWidget хейдер вообще убрать, ну не нужны они мне =(.
Записан
BRE
Гость
« Ответ #14 : Декабрь 16, 2010, 13:39 »

Товарищи, а можно как-нибудь в QTreeWidget хейдер вообще убрать, ну не нужны они мне =(.
void   setHeaderHidden ( bool hide )
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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