Pregunta

Tengo tres QDockWidgets cuales en forma de fichas en el arranque usando QMainWindow.tabifyDockWidget.

En la ventana principal, después de todo el addDockWidget llama:

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

Sobre la base de ciertas acciones, me gustaría seleccionar una de estas fichas y llevarlo a concentrarse, o, en la parte superior de los otros dos, si no es ya visible. He intentado usar setVisible y setWindowState(Qt.WindowActive), pero nada cambia.

¿Hay una manera de seleccionar mediante programación un widget muelle de pestañas y llevarlo a la parte delantera?

¿Fue útil?

Solución

Gracias a una respuesta en la lista de correo-qt interés, esto es muy fácil de hacer con QWidget.raise():

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

En PyQt, es QWidget.raise_():

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

Otros consejos

Para mí:

dock2.show ();

dock2.raise ();

era suficiente. Pero sí, ambos son necesarios!

No he probado esto, pero esto es lo que me gustaría probar en Qt 4.5 + (Voy a dejar la conversión PyQt a usted):

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() y QMainWindow::tabifyDockWidget()

Esto no funcionó para mí:

dock2.raise_() 

Me las arreglé para conseguir que funcione usando:

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

Si usted está buscando una solución para establecer el foco al widget y no dejarlo en un QDockWidget tabified en el fondo se puede utilizar el visibilidad-cambiado señal y un Proxy enfoque como esto:

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 pequeño ejemplo de trabajo:

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 solución que está trabajando para mí es:

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

Eso 3 funciones parecen necesarias.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top