2009-08-17 64 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