2009-08-17 23 views
10

Ich habe drei QDockWidgets, die beim Start mit QMainWindow.tabifyDockWidget Registerkarten sind.Fokussieren auf ein tabified QDockWidget in PyQt

im Hauptfenster, nachdem alle der addDockWidget Anrufe:

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

Basierend auf bestimmte Aktionen würde Ich mag eine dieser Registerkarten auswählen und bringen zu konzentrieren, oder, oben auf dem andere zwei, wenn es nicht schon sichtbar ist. Ich habe versucht mit setVisible und setWindowState(Qt.WindowActive), aber nichts ändert sich.

Gibt es eine Möglichkeit, programmgesteuert ein Dock-Widget mit Registerkarten auszuwählen und es nach vorne zu bringen?

Antwort

2

ich nicht getestet haben, aber hier ist, was ich in Qt versuchen würde 4.5+ (Ich werde die PyQt Umstellung auf Sie verlassen):

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

Siehe QMainWindow::tabifiedDockWidgets() und QMainWindow::tabifyDockWidget().

+0

Dies funktioniert auf jeden Fall, ist das einzige Problem, dass es die Registerkarten neu ordnet, die nicht ist Ideal. Bisher scheint es, dass dies nur eine Lösung ist ... Danke für das Snippet. – brianz

0

A Lösung, die für mich arbeitet ist:

tabifyDockWidg et (DOCK1, dock2)

dock2.setVisible (True)

dock2.setFocus()

dock2.raise_()

Das 3-Funktionen notwendig erscheinen.

3

Für mich:

dock2.show();

dock2.raise();

war genug. Aber ja, beides wird benötigt!

0

Das hat bei mir nicht funktioniert:

dock2.raise_() 

ich es arbeitet mit bekommen verwaltet:

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