Название: Поиск QAction в меню Отправлено: vladmailbox от Февраль 28, 2010, 17:37 Для поиска нужного пункта меню по имени использую такой код:
Код И это не работает. Более того, в отладчике видно, что для всех QAction objectName() возвращает пустую строку. Как это победить? Или может можно это сделать как-то проще? Название: Re: Поиск QAction в меню Отправлено: SABROG от Февраль 28, 2010, 17:43 QAction::text()
Название: Re: Поиск QAction в меню Отправлено: lit-uriy от Февраль 28, 2010, 17:49 >>для всех QAction objectName() возвращает пустую строку
А ты предварительно его задаёшь? Название: Re: Поиск QAction в меню Отправлено: vladmailbox от Март 01, 2010, 11:44 Нет. Но меню загружается для формы, и там имена прописаны.
Странно, неужели при загрузке формы имена не инициализируются? Кроме того, если запросить так: QAction * act = this->ui->mnuExit; QString name = act->objectName(); то имя есть. Название: Re: Поиск QAction в меню Отправлено: SABROG от Март 01, 2010, 13:44 Проверь валиден ли указатель после qobject_cast.
Название: Re: Поиск QAction в меню Отправлено: vladmailbox от Март 01, 2010, 15:02 Указатель валиден. Но хотя объект имеет тип QAction, в его properties стоят данные из parent QMenu.
Название: Re: Поиск QAction в меню Отправлено: SABROG от Март 01, 2010, 15:17 Указатель валиден. Но хотя объект имеет тип QAction, в его properties стоят данные из parent QMenu. Возможно qobject_cast козлит, попробуй через QObject::inherits("QAction") рассортировать. Название: Re: Поиск QAction в меню Отправлено: vladmailbox от Март 01, 2010, 18:00 В конце концов написал так:
QAction * findAction(QObjectList lst, QString &menuname) { for( QObjectList::const_iterator it = lst.begin(); it != lst.end(); ++it ) { if( (*it)->inherits("QAction") ) { QAction *act = qobject_cast<QAction*>(*it); QString name = act->objectName(); if( menuname.compare( name, Qt::CaseInsensitive ) == 0 ) return act; } } return 0; } QAction *act = findAction(this->children(), menuname); Такой вариант работает. Название: Re: Поиск QAction в меню Отправлено: SABROG от Март 01, 2010, 18:12 Значит qobject_cast пофиг какой виджет в какой переводить.
Название: Re: Поиск QAction в меню Отправлено: waster от Март 08, 2010, 17:48 В меню могут находиться не твои объекты QAction, а сделанные самой Qt, которые просто выглядят так же.
После фикса проверь ещё QWidgetAction: он может работать по-другому (например, я знаю, что он не откликается на некоторые евенты, на которые откликается QAction, типа вывода мышки за пределы элемента). Похоже, про него просто забыли при разработке :) |