2009-08-17 14 views
10

Tengo tres QDockWidgets que se pescan al iniciar usando QMainWindow.tabifyDockWidget.Enfoque en un QDockWidget tabulado en PyQt

En la ventana principal, después de todas las llamadas addDockWidget:

self.tabifyDockWidget(self.dock_widget1, self.dock_widget2) 
self.tabifyDockWidget(self.dock_widget1, self.dock_widget3) 

Sobre la base de ciertas acciones, me gustaría seleccionar una de estas fichas y llevarlo a concentrarse, o, en la parte superior de la otros dos, si aún no está visible. He intentado usar setVisible y setWindowState(Qt.WindowActive), pero nada cambia.

¿Hay alguna forma de seleccionar mediante programación un widget de base con pestañas y llevarlo al frente?

Respuesta

2

No he probado esto, pero aquí es lo que me gustaría probar en Qt 4.5 + (Voy a dejar la conversión PyQt a usted):

class MyMainWindow ; // A QMainWindow 

void MyMainWindow::bringToFront(QDockWidget* dockIn) 
{ 
    QList<QDockWidget*> docks = tabifiedDockWidgets(dockIn) ; 
    foreach(QDockWidget* dock, docks) 
    { 
     // Move second dock on top of first dock widget. 
     tabifyDockWidget(dock, dockIn) ; 
    } 
} 

Ver QMainWindow::tabifiedDockWidgets() y QMainWindow::tabifyDockWidget().

+0

Esto funciona sin duda, el único problema es que reordena las pestañas que es no ideal. Hasta ahora, parece que esto es solo una solución ... gracias por el fragmento. – brianz

0

Un La solución que funciona para mí es:

tabifyDockWidg y (dock1, DOCK2)

dock2.setVisible (Verdadero)

dock2.setFocus()

dock2.raise_()

Ese 3 funciones parecen necesarias.

3

Para mí:

dock2.show();

dock2.raise();

fue suficiente. ¡Pero sí, ambos son necesarios!

0

esto no funcionó para mí:

dock2.raise_() 

me las arreglé para conseguir que funcione usando:

dock2.show() 
parent.tabifyDockWidget(dock1, dock2)