2009-08-17 8 views
10

J'ai trois QDockWidgets qui sont tabulés au démarrage en utilisant QMainWindow.tabifyDockWidget.Mise au point sur un QDockWidget tabulé dans PyQt

Dans la fenêtre principale, après que tous les appels addDockWidget:

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

Sur la base de certaines actions, je voudrais choisir un de ces onglets et l'amener à se concentrer, ou, au-dessus de la deux autres, si ce n'est déjà visible. J'ai essayé d'utiliser setVisible et setWindowState(Qt.WindowActive), mais rien ne change.

Existe-t-il un moyen de sélectionner par programmation un widget de dock à onglets et de l'amener au premier plan?

Répondre

2

Je ne l'ai pas testé, mais voici ce que je voudrais essayer dans Qt 4.5+ (je vous laisse la conversion PyQt pour vous):

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

Voir QMainWindow::tabifiedDockWidgets() et QMainWindow::tabifyDockWidget().

+0

Cela fonctionne vraiment, le seul problème est qu'il réorganise les onglets qui est non idéal. Jusqu'à présent, il semble que ce n'est qu'une solution ... merci pour l'extrait. – brianz

0

A solution qui fonctionne pour moi est:

tabifyDockWidg et (DOCK1, DOCK2)

dock2.setVisible (True)

dock2.setFocus()

dock2.raise_()

Ce 3 fonctions semblent nécessaires.

3

Pour moi:

dock2.show();

dock2.raise();

était suffisant. Mais oui, les deux sont nécessaires!

0

Cela n'a pas fonctionné pour moi:

dock2.raise_() 

j'ai réussi à le faire fonctionner à l'aide:

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