Есть ли способ определить QToolbar с помощью кнопок и всплывающих меню, используя Qt Designer? - PullRequest
18 голосов
/ 19 июля 2011

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

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

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

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

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

Ответы [ 3 ]

35 голосов
/ 27 мая 2012

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

Вы можете добавить кнопки следующим образом.Сначала щелкните правой кнопкой мыши на главном окне и выберите «Добавить панель инструментов», если у вас его еще нет.Это должно добавить панель инструментов VERY SLIM в верхней части главного окна (тонкая, потому что она пустая).

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

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

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

3 голосов
/ 11 февраля 2013

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

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

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

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

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

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

0 голосов
/ 24 декабря 2011

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

...