![]() |
|
|
![]()
|
|
| implements |
|
||||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 210 Регистрация: 20.7.2010 Репутация: нет Всего: нет |
есть дерево, на него повешенно контекстное меню
нужно при клике на меню вызвать слот с передачей параметра, в моем случаи нужно узнать по какому из узлов произведенн клик сам connect
в h
а в ответ получаю Object::connect: No such slot MainWindow::addCatalog(item) |
||||||||
|
|||||||||
| implements |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 210 Регистрация: 20.7.2010 Репутация: нет Всего: нет |
на скока я понял, QTreeWidgetItem слоту, должен передать сигнал так? если это так, то как это реализовать?
|
|||
|
||||
| RazrFalcon |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 29.7.2009 Репутация: 1 Всего: 1 |
Посылаемое значение должно быть тем же, что и принимаемое. То есть выглядеть должно так:
Ну или
Так что вам нужен другой подход к реализации. |
||||
|
|||||
| newbee |
|
|||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: 1 Всего: 19 |
В Qt до ужаса идиотская идеология сигналов/слотов, свои параметры к вызовам добавлять нельзя. Тебе нужно сделать так:
connect(action,activated(),this,checkAction()); connect(this,itemActivated(Item_type),something,addCatalog(Item_type)); В this добавь сигнал itemActivated и слот checkAction. В checkAction определяй узел (для вьюшек это обычно делается через выделенные ноды вью) и посылай emit itemActivated(item). -------------------- You're face to face With man who sold the world |
|||
|
||||
| implements |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 210 Регистрация: 20.7.2010 Репутация: нет Всего: нет |
RazrFalcon, правильный вариант будет, создать класс наследованный от дерева, и в нем уже все реализовывать, тогда не возникнет проблем с передачей параметра=)
а вообще может возможно перегрузить функцию triggered для контекстного меню, чтоб он принимал узел дерева? |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
Политика Qt::ActionsContextMenu не годится.
Нужно либо создавать производный класс и переопределять метод contextMenuEvent() или коннектиться к сигналу void customContextMenuRequested ( const QPoint & pos ); с политикой CustomContextMenu
Добавлено через 5 минут и 56 секунд PS: после того, как вы введёте в редакторе "this, SLOT(", QtCreator выдаёт подсказки по имеющимся слотам у текущего класса (предварительно нужно добавить нужный слот в заголовок). Аналогично с сигналами. |
|||
|
||||
| implements |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 210 Регистрация: 20.7.2010 Репутация: нет Всего: нет |
а возможно ли создать класс от QTreeWidget, и в нем все реализовывать?или создавать только черз модели?
|
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
Поскольку ты создаёшь QTreeWidget в дизайнере, наследоваться от него неудобно, но если у тебя целый лес деревьев, писать для каждого дерева custtomContextMenuRequested неудобно, лучше создать производный класс и переопределить в нём contextMenuEvent() один раз.
|
|||
|
||||
| implements |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 210 Регистрация: 20.7.2010 Репутация: нет Всего: нет |
math64, я вообще хотел создать не в дизайнере, а класс, а затем его уже добавить на форму, тока вот от чего наследоваь класс
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
||||
|
||||
| math64 |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
Примерно так:
Добавлено через 1 минуту и 29 секунд
Поэтому я написал "неудобно", а не "невозможно" |
||||
|
|||||
| implements |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 210 Регистрация: 20.7.2010 Репутация: нет Всего: нет |
math64, это я так понял создается класс наследованный от QTreeWidget, да? а как его применить, я не допонял
|
|||
|
||||
| RazrFalcon |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 29.7.2009 Репутация: 1 Всего: 1 |
ПКМ по виджету QTreeWidget на своей форме и выбираем "преобразовать в" (promote to). Дальше думаю будет понятно.
|
|||
|
||||
| implements |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 210 Регистрация: 20.7.2010 Репутация: нет Всего: нет |
RazrFalcon, а вот нет таково там
|
|||
|
||||
| implements |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 210 Регистрация: 20.7.2010 Репутация: нет Всего: нет |
можно пример как это вызвать все дело |
|||
|
||||
| math64 |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
Его не нужно вызывать, оно автоматически конектится к сигналу customContextMenuRequested виджета treeWidget - конечно, такой виджет должен быть на форме. Коечно, метод должен быть в заголовке объявлен как слот:
Эта строчка добавляется в заголовке при нажатии ПКМ во встроенном дизайнере QtCreator на treeWidget и выборе сигнала customContextMenuRequested(QPoint) ну и в конструкторе (но значение этого свойства можно задать в дизайнере):
|
||||
|
|||||
| implements |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 210 Регистрация: 20.7.2010 Репутация: нет Всего: нет |
сделал
но слот ShowContextMenu не вызывается, почему так? |
|||
|
||||
| implements |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 210 Регистрация: 20.7.2010 Репутация: нет Всего: нет |
все всем спасибо получилось!
|
|||
|
||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, 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. |