Frage

Ich habe drei QDockWidgets, die beim Start mit QMainWindow.tabifyDockWidget Registerkarten werden.

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 den beiden anderen, wenn es nicht bereits sichtbar ist. Ich habe versucht, setVisible und setWindowState(Qt.WindowActive) verwenden, aber es ändert sich nichts.

Gibt es eine Möglichkeit programmatisch ein tabbed Dock-Widget auswählen und nach vorne bringen?

War es hilfreich?

Lösung

Dank einer Antwort auf die qt-Interesse Mailingliste, ist dies sehr einfach mit QWidget.raise() zu tun:

http://qt-project.org/doc/qt- 4.8 / qwidget.html # erhöhen

In PyQt, es ist QWidget.raise_():

http://pyqt.sourceforge.net/Docs/PyQt4/qwidget. html # erhöhen

Andere Tipps

Für mich:

dock2.show ();

dock2.raise ();

war genug. Aber ja, sind beide erforderlich!

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()

Das hat bei mir nicht funktioniert:

dock2.raise_() 

habe ich es geschafft, um es arbeiten mit:

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

Wenn Sie nach einer Lösung, um den Fokus auf das Widget zu setzen und lassen Sie es nicht auf einem tabified QDockWidget im Hintergrund können Sie die Sichtbarkeits geändert Signal und ein Fokus Proxy wie folgt aus:

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)

ein wenig Arbeitsbeispiel:

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()

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

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

Die 3-Funktionen notwendig erscheinen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top