2009-08-17 65 views
5

我有一个码头小部件,现在我想添加一个“窗口”菜单来显示/隐藏小部件。易足以与显示/隐藏QDockWidget?

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

的问题是做当用户点击[X]上的小部件,该showPropWinAct不会被触发。我怎样才能听到这个事件,并正确地切换操作,而不必触发第二个setVisible信号(一个来自关闭事件,大概是一个,而另一个来自上面的connect)?

回答

21

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

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

QAction * QDockWidget::toggleViewAction() const

“返回可以用来显示或关闭此停靠小部件可检查的作用

动作的文本设置。到码头小部件的窗口标题 “

+1

哈!辉煌。知道必须有更好的方法来做到这一点。非常感谢! :) – mpen 2009-08-17 20:54:40

+1

任何方式在设计器中做到这一点?目前我只使用'void MainWindow :: on_dockWindow_visibilityChanged(bool visible){ui-> actionDockWindowToggle-> setChecked(visible); }'然后在动作'on_toggled()'插槽中设置'setShown()'。它工作得很好,只有两行代码,但是如果有一种方法可以在设计器中使用'toggleViewAction()',那会很好! – Timmmm 2012-12-09 00:58:55