2009-08-17 14 views
5

Tengo un widget de dock, ahora quiero agregar un menú de "Ventana" para mostrar/ocultar el widget. Es bastante fácil de hacer conMostrar/ocultar 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))); 

El problema es cuando el usuario hace clic en la [x] en el widget, el showPropWinAct no consigue activar y desactivar. ¿Cómo puedo escuchar este evento y alternar la acción correctamente sin disparar una segunda señal de SetVisible (una del evento de cierre, presumiblemente, y otra del connect anterior)?

Respuesta

21

En lugar de crear una nueva acción, simplemente obtenga la acción del QDockWidget y use eso. Se ocupará de estado para usted:

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

QAction * QDockWidget::toggleViewAction() const

"Devuelve una acción comprobable que se puede utilizar para mostrar o cerrar este widget muelle

El texto de la acción se desarrolla. en el título de la ventana del widget del dock. "

+1

¡Hah! Brillante. Sabía que tenía que haber una mejor manera de hacer esto. Muchas gracias! :) – mpen

+1

¿Alguna manera de hacer esto en el diseñador? Actualmente solo uso 'void MainWindow :: on_dockWindow_visibilityChanged (bool visible) {ui-> actionDockWindowToggle-> setChecked (visible); } 'y luego' setShown() 'en la ranura de acción' on_toggled() '. Funciona bastante bien y solo tiene dos líneas de código, pero si hay una forma de usar 'toggleViewAction()' en el diseñador, ¡sería genial! – Timmmm