如何在 QWidget 中创建 QToolBar?
How to create QToolBar in QWidget?
我正在尝试在 QWidget
中添加 QToolBar
。但我希望它的功能像 QMainWindow
一样工作。
显然我无法在 QWidget
中创建 QToolBar
,并且使用 setAllowedAreas
不适用于 QWidget
:它仅适用于 QMainWindow
。另外,我的 QWidget
在 QMainWindow
.
如何为我的小部件创建 QToolBar
?
QToolBar
是一个小部件。这就是为什么您可以通过调用 addWidget
进行布局或将 QToolBar
父级设置为您的小部件来将 QToolBar
添加到任何其他小部件。
正如您在 QToolBar setAllowedAreas 方法的文档中所见:
This property holds areas where the toolbar may be placed.
The default is Qt::AllToolBarAreas.
This property only makes sense if the toolbar is in a QMainWindow.
这就是如果工具栏不在 QMainWindow 中就无法使用 setAllowedAreas
的原因。
The allowedAreas
property 仅当工具栏是 QMainWindow
的子项时才有效。您可以将工具栏添加到布局中,但用户无法移动它。但是,您仍然可以通过编程方式重新定位它。
将其添加到虚构的布局中 class 继承 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
}
更改工具栏的方向需要在 toolbarLayout
上调用 setDirection
的额外步骤,例如:
toolbar->setOrientation(Qt::Vertical);
toolbarLayout->setDirection(QBoxLayout::LeftToRight);
//the toolbar is now on the left side of the widget, oriented vertically
据我所知,正确使用工具栏的唯一方法是 QMainWindow
。
如果您想使用工具栏的全部功能,请创建一个带有 window 标志 Widget
的主window。这样您就可以将它添加到其他一些小部件中,而无需将其显示为新的 window:
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);
}
我正在尝试在 QWidget
中添加 QToolBar
。但我希望它的功能像 QMainWindow
一样工作。
显然我无法在 QWidget
中创建 QToolBar
,并且使用 setAllowedAreas
不适用于 QWidget
:它仅适用于 QMainWindow
。另外,我的 QWidget
在 QMainWindow
.
如何为我的小部件创建 QToolBar
?
QToolBar
是一个小部件。这就是为什么您可以通过调用 addWidget
进行布局或将 QToolBar
父级设置为您的小部件来将 QToolBar
添加到任何其他小部件。
正如您在 QToolBar setAllowedAreas 方法的文档中所见:
This property holds areas where the toolbar may be placed.
The default is Qt::AllToolBarAreas.
This property only makes sense if the toolbar is in a QMainWindow.
这就是如果工具栏不在 QMainWindow 中就无法使用 setAllowedAreas
的原因。
The allowedAreas
property 仅当工具栏是 QMainWindow
的子项时才有效。您可以将工具栏添加到布局中,但用户无法移动它。但是,您仍然可以通过编程方式重新定位它。
将其添加到虚构的布局中 class 继承 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
}
更改工具栏的方向需要在 toolbarLayout
上调用 setDirection
的额外步骤,例如:
toolbar->setOrientation(Qt::Vertical);
toolbarLayout->setDirection(QBoxLayout::LeftToRight);
//the toolbar is now on the left side of the widget, oriented vertically
据我所知,正确使用工具栏的唯一方法是 QMainWindow
。
如果您想使用工具栏的全部功能,请创建一个带有 window 标志 Widget
的主window。这样您就可以将它添加到其他一些小部件中,而无需将其显示为新的 window:
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);
}