2016-09-06 3 views
-1

У меня проблемы с моим QToolbar.PYQT5 - Как сохранить макет, когда QToolBar плавает

Я получил QToolBar и использовал QVBoxLayout внутри него, чтобы избавиться от QPushButtons.

Моя проблема была в том, что я плыл по ToolBar вокруг QVBoxLayout, чтобы потерять свою компоновку. После того, как я вернул его обратно в док-станцию, макет вернулся к норме.

Я хотел бы знать, есть ли способ исправить один и тот же макет для любой ситуации.

Я попытался реализовать два разных макета для каждого состояния, фиксированного и плавающего, но также не работал.

Единственный способ, которым я нашел, - это забыть QToolBar и перепрофилировать свой собственный персонализированный QWidget и смоделировать свою собственную ToolBar, чтобы она работала хорошо.

+0

ли вы добавить '' QVBoxLayout' используя метод QToolBar :: addWidget'? (Вы не должны добавлять такие виджеты на панель инструментов) –

+0

Можете ли вы привести пример, чтобы люди могли попробовать? – Robert

+0

Это в основном то, что я делал: self.setFixedSize (102, 865) self.mywidget = QWidget() self.vbox = QVBoxLayout() self.vbox.setSpacing (0) себя .vbox.setContentsMargins (10, 0, 0, 0) <добавить свои кнопки в моем VBox> self.mywidget.setLayout (self.vbox) self.addWidget (self.mywidget) – yurisnm

ответ

1
QToolBar

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

QToolBar Doc:

Кнопки панели инструментов добавляются путем добавления действия, используя addAction() или insertAction(). Группы кнопок можно разделить с помощью addSeparator() или insertSeparator(). Если кнопка панели инструментов не подходит, вместо этого можно добавить виджет, используя addWidget() или insertWidget(). Примерами подходящих виджетов являются QSpinBox, QDoubleSpinBox и QComboBox.

Например, следующий фрагмент кода дает следующие макеты:

ui->mainToolBar->addWidget(new QPushButton("A")); 
ui->mainToolBar->addWidget(new QPushButton("B")); 
ui->mainToolBar->addWidget(new QPushButton("C")); 
  • Горизонтальные:

    enter image description here

  • Вертикальные:

    enter image description here

  • Float:

    enter image description here

0

Вы не должны изменять расположение QToolBar. Он управляет своей собственной компоновкой, делая это, вы несколько сломали ее.

QToolBar - это виджет высокого уровня, который обрабатывает его содержимое с помощью QActions. Вам необходимо создать действия в своем приложении и добавить эти действия, используя addAction() или insertAction().

стилизации QToolBar должен быть сделан либо подклассы вашего текущего QStyle (трудно) или с помощью таблиц стилей (легко)

+1

Итак, что вы рекомендуете мне - не использовать кнопки внутри макета на моей панели инструментов, не так ли? Я предпочел бы использовать «addActions» в своей панели инструментов, а затем играть с ним? Я только начинаю с Qt. Таким образом, использование Actions вместо QPushButtons в QVBoxLayout внутри моей панели инструментов позволило бы мне вносить изменения, такие как «удалить поля», «удалить интервал», «установить значки» и все эти изменения дизайна? – yurisnm