Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: qtист от Сентябрь 30, 2009, 13:52



Название: QMenu
Отправлено: qtист от Сентябрь 30, 2009, 13:52
Вот создаётся меню с кучей пунктов.
Как узнать какой по порядку пункт был выбран?


Название: Re: QMenu
Отправлено: CroCIV от Сентябрь 30, 2009, 14:06
Вопрос не понятен.
каждому пункту меню соответствует свой QAction. Какой QAction сработал, тот и был выбран.  :)


Название: Re: QMenu
Отправлено: shadone от Октябрь 01, 2009, 11:35
Вероятно поможет QWidget::actions() (http://doc.qt.nokia.com/4.5/qwidget.html#actions)


Название: Re: QMenu
Отправлено: Alp от Октябрь 01, 2009, 12:36
Вот создаётся меню с кучей пунктов.
Как узнать какой по порядку пункт был выбран?
mymenu->actions().indexof( mymenu->exec() )


Название: Re: QMenu
Отправлено: panAlexey от Октябрь 01, 2009, 12:43
Вот создаётся меню с кучей пунктов.
Как узнать какой по порядку пункт был выбран?
mymenu->actions().indexof( mymenu->exec() )
А вот интересно, че будет, если быбор не осуществлен :)


Название: Re: QMenu
Отправлено: spectre71 от Октябрь 01, 2009, 14:21
Вот создаётся меню с кучей пунктов.
Как узнать какой по порядку пункт был выбран?

А какой в этом смысл? В чем заключается задача?


Название: Re: QMenu
Отправлено: shadone от Октябрь 01, 2009, 14:35
Вот создаётся меню с кучей пунктов.
Как узнать какой по порядку пункт был выбран?
забыл упомянуть - есть более удобный способ - можно ассоциировать любые данные в QAction (например положить индекс элемента в меню внутрь самого QAction) - тогда в обработчике достаточно будет просто взять данные из отправителя сигнала.
см http://doc.qt.nokia.com/4.5/qaction.html#setData


Название: Re: QMenu
Отправлено: Alp от Октябрь 01, 2009, 16:04
Вот создаётся меню с кучей пунктов.
Как узнать какой по порядку пункт был выбран?
mymenu->actions().indexof( mymenu->exec() )
А вот интересно, че будет, если быбор не осуществлен :)
Тогда будет упс и ай-ай-ай. Точнее, будет ASSERT. Думаю в релизе просто молчаливо проглотится.


Название: Re: QMenu
Отправлено: Rcus от Октябрь 01, 2009, 16:11
Вот создаётся меню с кучей пунктов.
Как узнать какой по порядку пункт был выбран?
mymenu->actions().indexof( mymenu->exec() )
А вот интересно, че будет, если быбор не осуществлен :)
Тогда будет упс и ай-ай-ай. Точнее, будет ASSERT. Думаю в релизе просто молчаливо проглотится.
С чего бы? по контракту если пункт не выбран QMenu::exec() вернет 0, QList<T>::indexOf() вернет -1 если элемент не найден. Хм...


Название: Re: QMenu
Отправлено: Igors от Октябрь 01, 2009, 16:14
Вот создаётся меню с кучей пунктов.
Как узнать какой по порядку пункт был выбран?
Просто дополнение к тому что уже ответили: Вам не нужно извлекать индекс и потом его "декодировать" - просто заряжайте обработчики через слот/сигнал и индекс Вас не волнует