Есть ли способ определить QToolbar с кнопками и всплывающими меню с помощью Qt Designer?

Я хочу иметь панель инструментов в Qt, содержащую либо QActions, либо QToolbarButtons, к которым прикреплены всплывающие меню. Я смог сделать это идеально в коде, создав QMenu, добавив его в QToolbarButton, а затем добавив его в QToolbar. Моя проблема в том, что это должно быть сделано полностью в дизайнере.

Это то, что я сделал с помощью кода, я хочу определить кнопки и меню в дизайнере qt:
http:  //img402.imageshack.us/img402/7669/exmaple.png

Что мы хотим сделать с qt Designer, так это отделить код от интерфейса. Например, это означает, что один человек может спроектировать внешний вид формы и компоненты, а затем программист может взять это и закодировать функциональность, лежащую в основе этого. Мы не сможем сделать это очень эффективно, если панели инструментов и меню должны разрабатываться программистом.

Кажется, что это было бы довольно распространенным требованием для многих приложений, и я не понимаю, как Qt мог заставить это сделать в коде, а не в дизайнере.

Если у кого-нибудь есть идеи, как это делается, может быть, я что-то упускаю в Qt?


person Eddie Loeffen    schedule 18.07.2011    source источник


Ответы (3)


Поддержка панелей инструментов в Qt Designer кажется несколько неинтуитивной и ограниченной. Я не знаю, как добавить всплывающие меню с выпадающими действиями непосредственно на панель инструментов в Qt Designer.

Вы можете добавить кнопки следующим образом. Сначала щелкните правой кнопкой мыши главное окно и выберите «Добавить панель инструментов», если у вас ее еще нет. Это должно добавить ОЧЕНЬ ТОНКУЮ панель инструментов в верхней части главного окна (тонкую, потому что она пуста).

Затем добавьте действие в редакторе действий. Это одна из панелей Qt Designer, выберите Вид->Редактор действий, если вы ее не видите. Здесь вы можете создавать новые действия.

Затем перетащите действия на панель инструментов, чтобы заполнить ее кнопками, запускающими действия.

Я знаю, что вы хотели всплывающее меню, но, насколько я знаю, это все, что вы можете сделать с Qt Designer. Кажется, несколько другие пришли к такому же выводу.

person moodboom    schedule 26.05.2012
comment
Я удивлен, что этот отличный ответ не был установлен как «ответ». - person ExpatEgghead; 06.12.2012
comment
Обновление: начиная с Qt Designer 4.8.5, похоже, нет способа включить контекстные меню для таких кнопок, как QToolButton. По крайней мере ничего в Qt Designer или в документации Qt Designer предполагает, что. - person Trilarion; 22.01.2014
comment
Отличный ответ. Я никогда не понимал, что действия можно перетаскивать на панель инструментов. - person Eric; 31.12.2015
comment
Это --› Во-первых, щелкните правой кнопкой мыши в главном окне и выберите Добавить панель инструментов. - person Timothy L.J. Stewart; 08.04.2021

Для этого есть хитрый трюк. Вы можете разместить нужные виджеты на специальном QWidget (или, скажем, QFrame) в Qt Designer и добавить этот виджет на панель инструментов в коде.

Добавьте в проект новый класс Qt с именем, например, QMyToolbarItem, производным от QWidget (или что-то другое). Затем откройте QMyToolbarItem.ui в дизайнере Qt. Добавьте к нему любые сложные виджеты. Вы можете использовать QComboBox или всплывающие кнопки для всплывающего меню. (Я уже упоминал, что это неудобно). Сохрани это. В коде вам просто нужно добавить пользовательский виджет на панель инструментов QMainWindow:

   ui.mainToolBar->addWidget(new QMyToolbarItem(this));

Не забудьте правильно установить политику размера QMyToolbarItem (например, установить желаемое значение для minimumSize из QMyToolbarItem). В противном случае на панели инструментов ничего не отображается.

Конечно, это нормально, только если вы хотите, чтобы на панель инструментов добавлялись не обычные элементы. Обратите внимание, что при этом вы теряете огромную мощь модели QAction.

В любом случае, это достаточно разумно отделяет элементы дизайна пользовательского интерфейса от кода и дает хорошие возможности над сложным дизайном виджетов на панели инструментов.

Наконец, не забудьте рассмотреть соответствующие ">Шаблоны представления модели, чтобы эффективно отделить логику пользовательского интерфейса от основной бизнес-логики, если вы еще этого не сделали.

person Masood Khaari    schedule 11.02.2013

В левом верхнем углу Qt Creator, когда вы разрабатываете графический интерфейс, должно быть поле, содержащее такие вещи, как «mainToolBar» и «menuBar». Убедитесь, что что-то похожее на это есть. Затем в нижней части окна Qt Creator есть место, занятое вкладкой «Редактор сигналов и слотов» и вкладкой «Редактор действий». Перейдите в редактор действий и выберите параметр «Новое действие». Это позволит вам создать действие. Это то, что ты искал?

person user1112148    schedule 23.12.2011
comment
Как вы можете использовать это для создания меню? Я не могу перетаскивать действия под другими действиями на панели инструментов и не вижу другого способа сделать это. - person Matthew Read; 19.03.2012