Как создать QToolBar в QWidget?

Я пытаюсь добавить QToolBar в QWidget, Но я хочу, чтобы его функционал работал так, как если бы он был QMainWindow,

Видимо не могу создать QToolBar в QWidgetи используя setAllowedAreas не работает с QWidget : работает только с QMainWindow, Также мой QWidget находится в QMainWindow,

Как я могу создать QToolBar для моего виджета?

2

Решение

allowedAreas имущество работает только тогда, когда панель инструментов является дочерней QMainWindow, Вы можете добавить панель инструментов в макет, но она не будет перемещаться пользователем. Однако вы все равно можете перемещать его программно.

Чтобы добавить его в макет для вымышленного класса наследования QWidget:

void SomeWidget::setupWidgetUi()
{
toolLayout = new QBoxLayout(QBoxLayout::TopToBottom, this);
//set margins to zero so the toolbar touches the widget's edges
toolLayout->setContentsMargins(0, 0, 0, 0);

toolbar = new QToolBar;
toolLayout->addWidget(toolbar);

//use a different layout for the contents so it has normal margins
contentsLayout = new ...
toolLayout->addLayout(contentsLayout);

//more initialization here
}

Изменение ориентации панели инструментов требует дополнительного шага вызова setDirection на toolbarLayoutНапример:

toolbar->setOrientation(Qt::Vertical);
toolbarLayout->setDirection(QBoxLayout::LeftToRight);
//the toolbar is now on the left side of the widget, oriented vertically
4

Другие решения

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

Как вы можете видеть в документации QToolBar setAllowedAreas метод:

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

По умолчанию используется Qt :: AllToolBarAreas.

Это свойство имеет смысл, только если панель инструментов находится в QMainWindow.

Вот почему нельзя использовать setAllowedAreas если панель инструментов не находится в QMainWindow.

2

Насколько я знаю, единственный способ правильно использовать панель инструментов с QMainWindow,

Если вы хотите использовать все функциональные возможности панели инструментов, создайте главное окно с флагом окна Widget, Таким образом, вы можете добавить его в другой виджет, не отображая его в новом окне:

class MyWidget : QMainWindow
{
public:
MyWidget(QWidget *parent);
//...

void addToolbar(QToolBar *toolbar);

private:
QMainWindow *subMW;
}

MyWidget::MyWidget(QWidget *parent)
QMainWindow(parent)
{
subMW = new QMainWindow(this, Qt::Widget);//this is the important part. You will have a mainwindow inside your mainwindow
setCentralWidget(QWidget *parent);
}

void MyWidget::addToolbar(QToolBar *toolbar)
{
subMW->addToolBar(toolbar);
}
0
По вопросам рекламы [email protected]