Название: HowTo: Еще раз о QAction и QMenu Отправлено: sa_mel от Сентябрь 05, 2013, 21:15 На Форуме есть тема QAction и QMenu (http://www.prog.org.ru/topic_4461_0.html), в которой был задан следующий вопрос
Цитата: Lion Если QAction полученный от QMenu::menuAction() добавить в тулбар, то можно вызвать это меню только по нажатию на маленькую стрелку у кнопки. Как заставить вылезть меню при нажатии на саму кнопку? Прошло 6 лет, а вопрос фактически остался без ответа. Что-либо "нагуглить" на других ресурсах тоже не получится. Поэтому решил изложить свое видение пути решения проблемы. Итак, пусть главное окно приложения сконструировано в дизайнере форм, и в главном меню имеется меню Open (с именем menuOpen), в котором выбирается формат открываемого файла (http://qtlinux.narod.ru/images/RussianQtForum/MainMenuOpen.png) Можно поместить это меню (и не только это) на ToolBar, вставив в конструкторе MainWindow следующий код Код
Результат иллюстрируется ниже (http://qtlinux.narod.ru/images/RussianQtForum/ToolBarMenuOpen.png) Действительно, меню раскрывается только при нажатии на стрелку рядом с кнопкой, а при нажатии на саму кнопку ничего не присходит. Чтобы увидеть каким образом можно расширить функциональные возможности данного интерфейса, поместим меню на ToolBar альтернативным способом. В этом нам поможет следующий код Код
Можно убедиться, что результат получается в точности такой же. Но теперь мы получаем возможность модифицировать код, чтобы изменить поведение кнопки. Для этого достаточно изменить одну строчку Код
Теперь меню будет раскрываться при нажатии на саму кнопку, а стрелочка лишь информирует о том, что за кнопкой закреплено меню, а не одно действие. Изменился и внешний вид кнопки (http://qtlinux.narod.ru/images/RussianQtForum/ToolBarToolButtonOpen.png) Полученный интерфейс будет удобен при портировании приложения на мобильную платформу с сенсорным экраном. Ведь стрелочка-то маааленькая! И попасть в нее пальцем пользователю будет нелегко. Теперь вернемся к значению QToolButton::MenuButtonPopup, которое может устанавливаться для свойства popupMode кнопки. На самом деле в нем есть глубокий смысл. Ведь может возникнуть ситуация, когда потребуется, чтобы меню раскрывалось именно при нажатии на стрелочку, а при нажатии на саму кнопку выполнялось бы какое-либо другое действие. Приведенный ниже код, напрмер, назначает кнопке выбор для открытия текстового файла Код
Теперь при нажатии на стрелочку раскрывается меню для выбора формата открываемого файла, а при нажатии на саму кнопку будет выбран текстовый формат файла (как бы по умолчанию) и вызвано действие, предусмотренное Вами для его открытия. Остается добавить, что за кнопкой может быть закреплено любое действие (не обязятельно из меню). Название: Re: Еще раз о QAction и QMenu Отправлено: Bepec от Сентябрь 05, 2013, 21:24 Это конечно интересно и увлекательно - красиво оформлено, с картинками, но почему вы не добавили это в конец той темы?
Название: Re: HowTo: Еще раз о QAction и QMenu Отправлено: sa_mel от Сентябрь 05, 2013, 21:28 При попытке добавить ответ в ту тему смутило сообщение
Внимание: в этой теме не было ответов в течение, по крайней мере 120 дней. Возможно стоит рассмотреть вариант открытия новой темы. Название: Re: Еще раз о QAction и QMenu Отправлено: xintrea от Сентябрь 08, 2013, 03:30 Это конечно интересно и увлекательно - красиво оформлено, с картинками, но почему вы не добавили это в конец той темы? Пусть будет здесь. Это действительно ховто. В той теме можно поместить ссылку сюда. |