如何在QWidget中创建QToolBar?

时间:2016-07-15 09:16:09

标签: c++ qt qtoolbar

我想在QToolBar中添加QWidget。但我希望它的功能像QMainWindow一样工作。

显然我无法在QToolBar中创建QWidget,而使用setAllowedAreas不能与QWidget一起使用:它只适用于QMainWindow。此外,我的QWidget位于QMainWindow

如何为我的小部件创建QToolBar

3 个答案:

答案 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);
}