显示/隐藏QDockWidget?

mpe*_*pen 6 qt visibility

我有一个停靠小部件,现在我想添加一个"窗口"菜单来显示/隐藏小部件.很容易做到

showPropWinAct = new QAction(tr("&Properties"), this);
showPropWinAct->setStatusTip(tr("Show properties window"));
showPropWinAct->setCheckable(true);
connect(showPropWinAct, SIGNAL(toggled(bool)), propertiesWindow, SLOT(setVisible(bool)));
Run Code Online (Sandbox Code Playgroud)

问题是当用户单击窗口小部件上的[x]时,showPropWinAct不会切换.我怎样才能听取这个事件,并正确切换动作,而不会触发第二个setVisible信号(一个来自关闭事件,一个来自connect上面)?

bri*_*anz 24

而不是创建一个新的动作,只需从QDockWidget本身获取动作并使用它.它会照顾你的状态:

http://qt-project.org/doc/qt-4.8/qdockwidget.html#toggleViewAction

QAction * QDockWidget::toggleViewAction () const

"返回可用于显示或关闭此停靠窗口小部件的可检查操作.

操作的文本设置为停靠窗口小部件的窗口标题."

  • 哈!杰出的。知道必须有更好的方法来做到这一点。非常感谢!:) (2认同)
  • 有什么办法可以在设计器中做到这一点?目前我只使用 `void MainWindow::on_dockWindow_visibilityChanged(bool visible) { ui->actionDockWindowToggle->setChecked(visible); }` 然后在操作 `on_toggled()` 槽中的 `setShown()`。它工作得很好,只有两行代码,但是如果有一种方法可以在设计器中使用 `toggleViewAction()`,那就太好了! (2认同)
  • @Timmmm [此处](https://ulm-iqo.github.io/qudi- generated-docs/html-docs/viewmenu.html)它说明了如何在设计器中执行此操作。不过,它不使用 QDockWidget 自己的“toggleViewAction”。 (2认同)