Russian Qt Forum
Ноябрь 25, 2024, 08:36 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Связать число с пунктом меню  (Прочитано 5929 раз)
yarick
Гость
« : Апрель 27, 2013, 07:21 »

Меню формируется динамически из списка и мне нужно узнать при клике, какой именно элемент связан с ним. Попытался поработать с QAction и setData - однако он почему-то "не видит" данные после клика.

Код:
QAction* act = menu->addAction("someName", this, SLOT(onClickMenuSlot()));
act->setData(1234);
Однако при клике на мункте меню и вызове в слоте
Код:
menu->activeAction()
равняется 0 по непонятной причине
Записан
Bepec
Гость
« Ответ #1 : Апрель 27, 2013, 07:50 »

sender() вас спасёт.
Почитайте  про него Улыбающийся
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #2 : Апрель 27, 2013, 18:07 »

Код:
menu->activeAction()
равняется 0 по непонятной причине

так клик не имеет отношения к activeAction().
Записан
Vamireh
Гость
« Ответ #3 : Апрель 27, 2013, 18:08 »

либо dynamic_cast<QAction*>(sender()), либо QSignalMapper
Записан
yarick
Гость
« Ответ #4 : Апрель 27, 2013, 18:51 »

Действительно помогло, спасибо большое.  dynamic_cast<QAction*>(sender()) - то что нужно
Записан
Syveren
Гость
« Ответ #5 : Май 02, 2013, 09:21 »

Мне кажется лучше использовать qobject_cast, вместо dynamic_cast.
qobject_cast<QAction*>(sender())
Записан
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #6 : Май 03, 2013, 09:22 »

Мне кажется лучше использовать qobject_cast, вместо dynamic_cast.
qobject_cast<QAction*>(sender())
А где-бы почитать про эти qobject_cast и dynamic_cast.
Детально, вразумительно и желат. по русски.
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
Bepec
Гость
« Ответ #7 : Май 03, 2013, 09:30 »

QObject в ассистенте Улыбающийся
dinamic_cast  в стандарте С++.

Смысл обоих - если неправильное преобразование, т.е. не в предка или наследника, то возвращается нуль.

А QObject просто заточен под Qt и QObject'ы.
Записан
schmidt
Гость
« Ответ #8 : Май 13, 2013, 00:05 »

dynamic_cast отжирает много процессорного времени Улыбающийся Вообще смысл его в том, чтобы корректно приводить указатели базовых/производных классов в иерархии. Если преобразование не вписывается в иерархию, dynamic_cast вернет 0. Но такое отслеживание дорого обходится во время исполнения программы, чаще всего вызов dynamic_cast сопряжен с операциями сравнения строк (имен классов) - и чем больше классов в иерархии, тем тяжелей проходит каждый вызов dynamic_cast. Не стоит стрелять из пушки по воробьям, ведь кроме QAction в вашем слоте больше неоткуда появиться другим типам, если конечно вы не подключаете к нему с десяток сигналов от разных виджетов, что маловероятно )
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.172 секунд. Запросов: 23.