Подтвердить что ты не робот

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

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

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

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

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

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

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

Ответ 3

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