2009-08-17 13 views
10

Ho tre QDockWidgets che sono catalogati all'avvio utilizzando QMainWindow.tabifyDockWidget.Concentrazione su un QDockWidget tabificato in PyQt

Nella finestra principale, dopo che tutte le chiamate addDockWidget:

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

In base a determinate azioni, vorrei scegliere una di queste schede e portarlo a fuoco, o, in cima al altri due, se non è già visibile. Ho provato a utilizzare setVisible e setWindowState(Qt.WindowActive), ma non cambia nulla.

C'è un modo per selezionare a livello di programmazione un widget del tabbed dock e portarlo in primo piano?

risposta

2

non ho ancora testato questo, ma qui è quello che vorrei provare a Qt 4.5+ (lascio la conversione PyQt a voi):

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) ; 
    } 
} 

Vedi QMainWindow::tabifiedDockWidgets() e QMainWindow::tabifyDockWidget().

+0

Questo funziona sicuramente, l'unico problema è che riordina le linguette che è mancato ideale. Finora, sembra che questa sia solo una soluzione ... grazie per lo snippet. – brianz

0

A soluzione che sta funzionando per me è:

tabifyDockWidg et (dock1, DOCK2)

dock2.setVisible (True)

dock2.setFocus()

dock2.raise_()

che 3 funzioni sembrano necessari.

3

Per me:

dock2.show();

dock2.raise();

era abbastanza. Ma sì, entrambi sono necessari!

0

Questo non ha funzionato per me:

dock2.raise_() 

sono riuscito a farlo funzionare con:

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