Я пытаюсь добавить QToolBar
в QWidget
, Но я хочу, чтобы его функционал работал так, как если бы он был QMainWindow
,
Видимо не могу создать QToolBar
в QWidget
и используя setAllowedAreas
не работает с QWidget
: работает только с QMainWindow
, Также мой QWidget
находится в QMainWindow
,
Как я могу создать QToolBar
для моего виджета?
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
QToolBar
это виджет Вот почему вы можете добавить QToolBar
в любой другой виджет по телефону addWidget
для макета или путем установки QToolBar
родитель для вашего виджета.
Как вы можете видеть в документации QToolBar setAllowedAreas метод:
Это свойство содержит области, в которых можно разместить панель инструментов.
По умолчанию используется Qt :: AllToolBarAreas.
Это свойство имеет смысл, только если панель инструментов находится в QMainWindow.
Вот почему нельзя использовать setAllowedAreas
если панель инструментов не находится в QMainWindow.
Насколько я знаю, единственный способ правильно использовать панель инструментов с 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);
}