2009-08-17 4 views
5

도킹 위젯이 있습니다. 이제 위젯을 표시하거나 숨기려면 "윈도우"메뉴를 추가하고 싶습니다. 사용자가 [X] 위젯에서 showPropWinAct가 전환되지 않습니다 클릭 할 때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))); 

문제는 함께 할 쉬운 정도. 어떻게이 이벤트를 듣고, 두 번째 setVisible 신호 (아마도 클로즈 이벤트에서 하나, 위의 connect에서 하나)를 발사하지 않고 동작을 적절히 토글 할 수 있습니까?

답변

21

새 작업을 만드는 대신 QDockWidget에서 작업을 가져 와서 사용하십시오. 그것은 당신을 위해 상태를 알아서 할게요 :

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

QAction * QDockWidget::toggleViewAction() const

는 "이 도크 위젯을 표시하거나 종료하는 데 사용할 수있는 체크 할 조치를 반환

액션의 텍스트가 설정됩니다. 도킹 위젯의 창 제목에. "

+1

하아! 훌륭한. 이것을하기위한 더 좋은 방법이 있어야한다는 것을 알았습니다. 정말 고맙습니다! :) – mpen

+1

디자이너에서이 작업을 수행하는 방법은 무엇입니까? 현재는 그냥'void MainWindow :: on_dockWindow_visibilityChanged (bool visible) {ui-> actionDockWindowToggle-> setChecked (visible); }'그리고 나서'on_toggled()'액션의'setShown()'을 호출합니다. 잘 작동하고 두 줄의 코드 일뿐입니다.하지만 디자이너에서'toggleViewAction()'을 사용하면 멋질 것입니다. – Timmmm