我想在QToolBar
中添加QWidget
。但我希望它的功能像QMainWindow
一样工作。
显然我无法在QToolBar
中创建QWidget
,而使用setAllowedAreas
不能与QWidget
一起使用:它只适用于QMainWindow
。此外,我的QWidget
位于QMainWindow
。
如何为我的小部件创建QToolBar
?
答案 0 :(得分:4)
QMainWindow
的子项时, The allowedAreas
property才有效。您可以将工具栏添加到布局中,但用户不能移动它。但是,您仍然可以通过编程方式重新定位它。
将其添加到继承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
答案 1 :(得分:2)
QToolBar
是一个小部件。这就是为什么,您可以通过调用QToolBar
进行布局或将addWidget
父级设置为您的小部件,为任何其他小部件添加QToolBar
。
正如您在QToolBar setAllowedAreas方法的文档中看到的那样:
此属性包含可放置工具栏的区域。
默认为Qt :: AllToolBarAreas。
如果工具栏位于QMainWindow中,则此属性才有意义。
如果工具栏不在QMainWindow中,那么就不可能使用setAllowedAreas
。
答案 2 :(得分:0)
据我所知,正确使用工具栏的唯一方法是使用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);
}