Domanda

Ho tre QDockWidgets che sono tabulazioni in corrispondenza di avvio utilizzando QMainWindow.tabifyDockWidget.

Nella finestra principale, dopo tutte le addDockWidget chiamate:

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 agli altri due, se non è già visibile. Ho provato con setVisible e setWindowState(Qt.WindowActive), ma non cambia nulla.

C'è un modo per selezionare a livello di codice un widget a schede dock e portare in primo piano?

È stato utile?

Soluzione

Grazie ad una risposta sulla mailing list qt-interessi, questo è molto semplice da fare con QWidget.raise():

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

In PyQt, è QWidget.raise_():

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

Altri suggerimenti

Per quanto mi riguarda:

dock2.show ();

dock2.raise ();

è stato sufficiente. Ma sì, sono necessarie entrambe le cose!

Non ho ancora testato questo, ma ecco cosa 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 ) ;
   }
}

QMainWindow::tabifiedDockWidgets() e QMainWindow::tabifyDockWidget()

Questo non ha funzionato per me:

dock2.raise_() 

Sono riuscito a farlo funzionare utilizzando:

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

Se siete alla ricerca di una soluzione per impostare la messa a fuoco al widget e non lasciarlo su un QDockWidget tabified in sottofondo è possibile utilizzare il visibilità-cambiato segnale e un procura attenzione in questo modo:

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 piccolo esempio di lavoro:

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

Una soluzione che sta lavorando per me è:

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

che sembrano necessari 3 funzioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top