crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

3 страниц V   1 2 3 >  
Ответить в данную темуНачать новую тему
> Создание вложенного действия QAction
Litkevich Yuriy
  опции профиля:
сообщение 31.7.2010, 18:42
Сообщение #1


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Не могу понять как создать вложенное действие (подменю)

Есть указатель на QAction, например:
QAction *createSubAction(QAction *action, const QString &newaction)
{
...
}
Нужно что бы функция сделала, для входного "действия" выпадающее меню с пунктом newaction и вернула указатель на "действие" ассоциированное с этим пунктом.
Схема меню:
пункт1
пункт2
action.text() > newaction
пункт3

где:
action.text() - существующий пункт меню, к которому требуется добавить подменю
newaction - вновь созданный пункт подменю
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 31.7.2010, 18:59
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2898
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


А вот это разве не оно ?
Цитата
QMenu * QAction::menu () const
Returns the menu contained by this action. Actions that contain menus can be used to create menu items with submenus, or inserted into toolbars to create buttons with popup menus.

See also setMenu() and QMenu::addAction().

+
Цитата
QAction * QMenu::addAction ( const QString & text )
This is an overloaded function.

This convenience function creates a new action with text. The function adds the newly created action to the menu's list of actions, and returns it.


Причина редактирования: Используй теги по назначению
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 31.7.2010, 19:17
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


И?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 31.7.2010, 19:20
Сообщение #4


фрилансер
******

Группа: Участник
Сообщений: 2898
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


А что И )
QAction *createSubAction(const QAction *action, const QString &newaction)
{
   return action->menu()->addAction ( newaction );
}


(но не проверял)

Сообщение отредактировал Алексей1153 - 31.7.2010, 19:22
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 31.7.2010, 19:37
Сообщение #5


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


это ты просто создаёшь новый пункт в меню, а мне нужно вложенное меню создать.

Здаётся мне, что в Qt это очередная не решаемая задача, среди, казалось бы, простейших
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 31.7.2010, 20:18
Сообщение #6


фрилансер
******

Группа: Участник
Сообщений: 2898
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Ещё мысль (по аналогии с тем, как это делается в WinAPI)

создать объект QMenu, вставить в него пункты, а затем присобачить это меню к действию методом
void QAction::setMenu ( QMenu * menu )

И это действие добавить как очередной пункт родительского меню


Собственно, что и требовалось доказать
    QAction* pAsub=0;    
    QMenu& m=*new QMenu(this);
    m.addAction("1");
    pAsub=m.addAction("2");
    m.addAction("3");
        
    QMenu& m2=*new QMenu(&m);
    m2.addAction("11");
    m2.addAction("22");
    m2.addAction("33");
    pAsub->setMenu(&m2);
    
    m.popup(QPoint(0,0));



(блин, не пойму, как картинку вставить в пост)

Сообщение отредактировал Алексей1153 - 31.7.2010, 20:27
Прикрепленные файлы
Прикрепленный файл  sub.zip ( 953 байт ) Кол-во скачиваний: 62
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 31.7.2010, 20:42
Сообщение #7


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Алексей1153 @ 1.8.2010, 0:18) *
QMenu& m=*new QMenu(this);
не понятно за чем вся эта химия с ссылками и указателями
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 31.7.2010, 20:48
Сообщение #8


фрилансер
******

Группа: Участник
Сообщений: 2898
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


со ссылками приятнее работать , точка меньше загромождает код, чем стрелка :) А так разницы нет
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 31.7.2010, 20:52
Сообщение #9


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Алексей1153 @ 1.8.2010, 0:18) *
И это действие добавить как очередной пункт родительского меню
пункт уже есть. Схема меню:
Было:

пункт1
пункт2
action.text()
пункт3

Стало:

пункт1
пункт2
action.text() > newaction
пункт3



Цитата(Алексей1153 @ 1.8.2010, 0:48) *
со ссылками приятнее работать , точка меньше загромождает код
ничуть, напиши тоже самое в более естественной форме и сравни.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 31.7.2010, 20:54
Сообщение #10


фрилансер
******

Группа: Участник
Сообщений: 2898
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Ну так ведь доступ к action есть ?
пункт1
пункт2
action.setMenu(&m2);
пункт3


Или я что-то не понимаю...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

3 страниц V   1 2 3 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 30.5.2020, 9:14