![]() |
|
![]() ![]() ![]() |
|
htzg |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 17.4.2010 Репутация: нет Всего: нет |
Здравствуйте!
Как правильно унаследоваться от QWidget и QTreeWidgetItem. Меня смущает следующее: в конструкторе кто должен быть parent. Цель собственно следующая: хочу что бы можно было контекстное меню вызывать при щелчке правой кнопкой мыши по элементу дерева. Содержание контекстного меню зависти от того, какой элемент дерева выбрали. Для этого создаю несколько классов, каждый из которых наследуется от QWidget и QTreeWidgetItem, но у каждого будет свой QAction в конструкторе. Может это не так делается? Пример одного из таких классов:
Пардон за опечатку в теме... Это сообщение отредактировал(а) htzg - 8.3.2012, 00:13 |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
htzg, я так и не понял, зачем использовать наследование от QWidget? Тем более, что подобное не подразумевается в архитектуре QTreeWidget.
Сделай просто хранение QAction внутри твоего класса, а так же доступ из-вне к нему. Когда будет правый щелчок, то обработчик QTreeWidget сможет взять этот QAction и выдать меню. |
|||
|
||||
htzg |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 17.4.2010 Репутация: нет Всего: нет |
я не правильно тему назвал.
я хотел сказать наследование QWidget и QTreeWidgetItem что бы по щелчку на конкретный элемент дерева вываливалось конкретное для этого элемента контекстное меню. пардон еще раз! п.с.: почему нельзя название темы редактировать? ![]() Это сообщение отредактировал(а) htzg - 8.3.2012, 10:58 |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
htzg, название вполне соответствует содержанию.
Кто тебе мешает хранить меню внутри элемента? При правом клюке на QTreeWidget определять нужный элемент, брать у него меню и выводить его. Просто то, что ты хочешь сделать делать смысла нет. QTreeWidget рисует стандартное дерево. Если тебе нужно что-то экзотическое, то для этого надо использовать QTreeView. А виджеты в качестве элементов использовать не стоит - тормозить будет и жрать память. |
|||
|
||||
htzg |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 17.4.2010 Репутация: нет Всего: нет |
типа такого:
? ![]() |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
htzg, да, ты правильно понял.
|
|||
|
||||
htzg |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 17.4.2010 Репутация: нет Всего: нет |
Спасибо бльшое в 100-й раз!
![]() |
|||
|
||||
htzg |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 17.4.2010 Репутация: нет Всего: нет |
bsa, пошел по этому пути.
В меню будут несколько экшенов, один из которых должен удалять treeWidgetModelItem. Т.е. при клюке правой кнопки мыши должно выпадать контекстное меню в котором выбирается "удалить" и item удаляется. Но что бы удалить item нужно TreeWidget передать указатель на него. Я так понимаю нужно сделать в MainWindow слот, типа
потому в MainWindow QAction
и уже в removeItemAction прописать connect(removeItemAction, SIGNAL(triggered()), this, SLOT(removeItem(QTreeWidgetItem *))) Отсюда видно что сигнал не передаст мне указатель на удаляемый Item. Как быть. Короче говоря: как сделать так (не важно каким способом), что бы при клюке правой кнопкой мыши на TreeWidgetItem выпадало контекстное меню, в котором можно было выбрать "удалить" и таким образом удалить выбранный TreeWidgetItem. Спасибо! |
||||
|
|||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
У QTreeWidget должен быть метод, который по координатам определяет элемент (item).
|
|||
|
||||
math64 |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
Не вижу особого смысла делать класс, производный от QTreeWidgetItem.
Необходимые дополнительные данные можно засунуть с помощью item->setData(column, Qt::UserRole, value); Потом указатель на item будет не нужен, данные выдаст модель:
Удаление тоже через модель:
Это сообщение отредактировал(а) math64 - 14.3.2012, 11:11 |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |