Создание вложенного действия QAction |
Здравствуйте, гость ( Вход | Регистрация )
Создание вложенного действия QAction |
DEADHUNT |
31.7.2010, 21:08
Сообщение
#11
|
Активный участник Группа: Участник Сообщений: 430 Регистрация: 15.4.2009 Пользователь №: 686 Спасибо сказали: 26 раз(а) Репутация: 2 |
а почему подменю нельзя так добавить QMenu::addMenu, зачем что придумывать для QAction?
|
|
|
Litkevich Yuriy |
31.7.2010, 21:10
Сообщение
#12
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
DEADHUNT |
31.7.2010, 21:15
Сообщение
#13
|
Активный участник Группа: Участник Сообщений: 430 Регистрация: 15.4.2009 Пользователь №: 686 Спасибо сказали: 26 раз(а) Репутация: 2 |
|
|
|
Алексей1153 |
31.7.2010, 21:16
Сообщение
#14
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
а почему подменю нельзя так добавить QMenu::addMenu, зачем что придумывать для QAction? тут какая-то интересная иерархия Вроде бы первично QMenu. Затем, QMenu содержит список QAction. ....Каждый QAction содержит свой QMenu m , который, если нет подменю, пуст. ........Ну, а QMenu - ... (рекурсивно повторять до талого снега) А удалить QAction - значит удалить пункт Сообщение отредактировал Алексей1153 - 31.7.2010, 21:19 |
|
|
Litkevich Yuriy |
31.7.2010, 21:27
Сообщение
#15
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
значит можно удалить QAction, а вместо него вставить QMenu и наоборот если надо. А удалить QAction - значит удалить пункт не только, ещё и те объекты которые прицеплены к его сигналам, могут стать глухими.Вроде бы первично QMenu. поидее и QMenu имеет ассоциированный с ним QAction, и является визуальным контейнером QAction'ов. И пункт на панели меню - тоже QAction. Т.е. QAction всему голова. Однако иерархию построить невозможно.Вообще понадобилась относительно простая вещь. Плагины возвращают строку такого вида: "Правка/Копировать" "Правка/Вставить" "Настройки/Модули/Редактор" И т.п. плагины могут быть как дочерним окном в MDI, соответственно менюхи должны перестраиваться в зависимости от активного окна. Также плагины могут быть не визуальными но содержать диалоги, поэтому для доступа к диалогам, они просят главное окно создать цепочку пунктов меню. Если часть цепочки существует, то туда просто, что-то добавляется. Если бы QAction был полноценным классом, эту идею можно было бы довольно легко реализовать. |
|
|
DEADHUNT |
31.7.2010, 21:39
Сообщение
#16
|
Активный участник Группа: Участник Сообщений: 430 Регистрация: 15.4.2009 Пользователь №: 686 Спасибо сказали: 26 раз(а) Репутация: 2 |
|
|
|
Алексей1153 |
31.7.2010, 21:44
Сообщение
#17
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
поидее и QMenu имеет ассоциированный с ним QAction, и является визуальным контейнером QAction'ов. И пункт на панели меню - тоже QAction. Т.е. QAction всему голова. Однако иерархию построить невозможно. Ну почему же невозможно, всё вроде стройно: ассоциированный с ним QAction - это собственник этого QMenu , и он (этот ваще-основной QAction) никогда не будет вызван То есть, схематично будет как-то так:
А почему QAction вдруг не полноценный класс ? )) Из исходников Qt:
Цитата "Правка/Копировать" "Правка/Вставить" "Настройки/Модули/Редактор" ....они просят главное окно создать цепочку пунктов меню. Если часть цепочки существует, то туда просто, что-то добавляется. То есть, из текстового описания меню нужно создать свой объект меню с этими пунктами, так ? Сообщение отредактировал Алексей1153 - 31.7.2010, 21:41 |
|
|
Litkevich Yuriy |
31.7.2010, 21:55
Сообщение
#18
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
Алексей1153 |
31.7.2010, 22:21
Сообщение
#19
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
void setSubActon(QAction *) - Скорее должно бы выглядеть так
То есть, такой метод уже есть - SetMenu ------------------------- QAction * QAction::parentAction() - это относится к QMenu, то есть а это вроде есть тоже Цитата QAction * QMenu::menuAction () const Returns the action associated with this menu. ----------------------------- QList<QAction *> childActions() - это тоже метод меню должОн быть. (аналога не нашёл ) --------------------- Если меню создаётся с нуля, то проще всего вести ассоциативный список map<QString,QAction*> Пример содержимого (адреса абстрактные, а ключи - реальные): "Правка/" , 0x1 "Правка/Копировать/" , 0x2 "Правка/Вставить/", 0x3 "Настройки/", 0x4 "Настройки/Модули/", 0x5 "Настройки/Модули/Редактор/", 0x6 А для полного комфорту, возможно, ещё придётся вести эквивалентный список map<QAction*,QString> Сообщение отредактировал Алексей1153 - 31.7.2010, 22:23 |
|
|
DEADHUNT |
31.7.2010, 22:24
Сообщение
#20
|
Активный участник Группа: Участник Сообщений: 430 Регистрация: 15.4.2009 Пользователь №: 686 Спасибо сказали: 26 раз(а) Репутация: 2 |
|
|
|
Текстовая версия | Сейчас: 30.11.2024, 5:58 |