Название: Связать число с пунктом меню Отправлено: yarick от Апрель 27, 2013, 07:21 Меню формируется динамически из списка и мне нужно узнать при клике, какой именно элемент связан с ним. Попытался поработать с QAction и setData - однако он почему-то "не видит" данные после клика.
Код: QAction* act = menu->addAction("someName", this, SLOT(onClickMenuSlot())); Код: menu->activeAction() Название: Re: Связать число с пунктом меню Отправлено: Bepec от Апрель 27, 2013, 07:50 sender() вас спасёт.
Почитайте про него :) Название: Re: Связать число с пунктом меню Отправлено: Alex Custov от Апрель 27, 2013, 18:07 Код: menu->activeAction() так клик не имеет отношения к activeAction(). Название: Re: Связать число с пунктом меню Отправлено: Vamireh от Апрель 27, 2013, 18:08 либо dynamic_cast<QAction*>(sender()), либо QSignalMapper
Название: Re: Связать число с пунктом меню Отправлено: yarick от Апрель 27, 2013, 18:51 Действительно помогло, спасибо большое. dynamic_cast<QAction*>(sender()) - то что нужно
Название: Re: Связать число с пунктом меню Отправлено: Syveren от Май 02, 2013, 09:21 Мне кажется лучше использовать qobject_cast, вместо dynamic_cast.
qobject_cast<QAction*>(sender()) Название: Re: Связать число с пунктом меню Отправлено: panAlexey от Май 03, 2013, 09:22 Мне кажется лучше использовать qobject_cast, вместо dynamic_cast. А где-бы почитать про эти qobject_cast и dynamic_cast.qobject_cast<QAction*>(sender()) Детально, вразумительно и желат. по русски. Название: Re: Связать число с пунктом меню Отправлено: Bepec от Май 03, 2013, 09:30 QObject в ассистенте :)
dinamic_cast в стандарте С++. Смысл обоих - если неправильное преобразование, т.е. не в предка или наследника, то возвращается нуль. А QObject просто заточен под Qt и QObject'ы. Название: Re: Связать число с пунктом меню Отправлено: schmidt от Май 13, 2013, 00:05 dynamic_cast отжирает много процессорного времени :) Вообще смысл его в том, чтобы корректно приводить указатели базовых/производных классов в иерархии. Если преобразование не вписывается в иерархию, dynamic_cast вернет 0. Но такое отслеживание дорого обходится во время исполнения программы, чаще всего вызов dynamic_cast сопряжен с операциями сравнения строк (имен классов) - и чем больше классов в иерархии, тем тяжелей проходит каждый вызов dynamic_cast. Не стоит стрелять из пушки по воробьям, ведь кроме QAction в вашем слоте больше неоткуда появиться другим типам, если конечно вы не подключаете к нему с десяток сигналов от разных виджетов, что маловероятно )
|