Question

J'ai trois QDockWidgets qui sont tabulé au démarrage à l'aide QMainWindow.tabifyDockWidget.

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

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 des deux autres, si ce n'est pas déjà visible. Je l'ai essayé d'utiliser setVisible et setWindowState(Qt.WindowActive), mais rien ne change.

Est-il possible de sélectionner un programme widget dock à onglets et l'amener à l'avant?

Était-ce utile?

La solution

Merci à une réponse sur la liste de diffusion qt-intérêts, ce qui est très simple à faire avec QWidget.raise():

http://qt-project.org/doc/qt- 4.8 / qwidget.html # augmenter

Dans PyQt, il est QWidget.raise_():

http://pyqt.sourceforge.net/Docs/PyQt4/qwidget. html # augmenter

Autres conseils

Pour moi:

dock2.show ();

dock2.raise ();

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

Je ne l'ai pas testé, mais voici ce que je voudrais essayer de 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()

Cela ne fonctionne pas pour moi:

dock2.raise_() 

J'ai réussi à le faire fonctionner en utilisant:

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

Si vous êtes à la recherche d'une solution pour régler le focus sur le widget et ne pas le laisser sur un QDockWidget tabified en arrière-plan, vous pouvez utiliser le Signal changé visibilité et proxy de focus comme ceci:

class Dock(QDockWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.visibilityChanged.connect(self.setVisibility)

    def setVisibility(self, visible):
        if visible: self.setFocus()

    def setWidget(self, widget:QWidget):
        super().setWidget(widget)
        self.setFocusProxy(widget)

un petit exemple de travail:

app = QApplication([])
main = QMainWindow()
dock1 = Dock('Dock1', main )
dock1.setWidget(QTextEdit(dock1))
dock2 = Dock('Dock2', main )
dock2.setWidget(QTextEdit(dock2))
main.addDockWidget(Qt.LeftDockWidgetArea, dock1)
main.tabifyDockWidget(dock1, dock2)
main.show()
app.exec()

Une solution qui fonctionne pour moi:

tabifyDockWidget(dock1, dock2)
dock2.setVisible(True)
dock2.setFocus()
dock2.raise_()

Ce 3 fonctions semblent nécessaires.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top