当从/向QStackedWidget的页面切换时,如何隐藏/恢复工具栏?

时间:2014-08-13 02:20:38

标签: qt pyqt toolbar

我正在编写的应用程序有几个不同的页面,我用QStackedWidget切换。我想要一个仅在某个页面处于活动状态时显示的工具栏。

我的初步计划是简单地从该页面调用addToolbar(),但似乎 QMainWindow具有addToolbar()方法。因此,我将工具栏创建为页面的成员。当我切换到该页面时,我的QMainWindow会占据QStackedWidget并调用addToolbar(self.page.toolbar),而当我切换到removeToolbar(self.page.toolbar)时,我会调用removeToolbar()

addToolbar()的文档中,它说:从主窗口布局中删除工具栏并隐藏它。请注意,工具栏不会被删除。

但似乎工具栏正在被删除。当我启动程序时,工具栏被隐藏,因为我想要它。当我切换到页面时,调用removeToolbar()并显示工具栏。当我离开页面时,会调用addToolbar()并再次隐藏它。到目前为止一切都很好。

问题在于,即使每次调用QToolBar,我都会在下一次访问页面时再次显示工具栏。

我是否添加了隐藏的工具栏?我怎么能取消隐藏呢?

或者,是否可以将QMainWindow绑定到任意小部件而不仅仅是{{1}}?

2 个答案:

答案 0 :(得分:3)

我没有使用addToolBarremoveToolBar,而是使用QToolBar的{​​{1}}。

在我想要工具栏的页面的小部件中,我创建工具栏并将其设置为toggleViewAction为false,然后触发它。这使得工具栏最初隐藏。

toggleViewAction()

然后每当我切换到页面或从页面切换时,我再次触发 self.toolbar = QtGui.QToolBar(self) #add the toolbar to the main window self.parent().addToolBar(self.toolbar) #start hidden self.toolbar.toggleViewAction().setChecked(False) self.toolbar.toggleViewAction().trigger()

toggleViewAction()

通过浏览QToolBar文档,我觉得如此快速地找到答案是个傻瓜,但希望有人觉得这很有用。

答案 1 :(得分:0)

在调用addToolBar(toolBar)之后,必须调用QToolBar :: show()。 cpp样式代码如下:

void setToolBarVisible(bool visibility)
{
    if(visibility)
    {
        addToolBar(toolBar);
        toolBar->show();
    }
    else
    {
        removeToolBar(toolBar);
    }
}