문제

스타트 업에서 탭을 사용하는 3 개의 qdockwidget이 있습니다. QMainWindow.tabifyDockWidget.

메인 창에서, 모든 후 addDockWidget 전화 :

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

특정 조치를 바탕 으로이 탭 중 하나를 선택하여 아직 보이지 않는 경우 다른 두 가지 위에 초점을 맞추고 싶습니다. 사용해 보았습니다 setVisible 그리고 setWindowState(Qt.WindowActive), 그러나 아무것도 변하지 않습니다.

탭 도크 위젯을 프로그래밍 방식으로 선택하여 전면으로 가져 오는 방법이 있습니까?

도움이 되었습니까?

해결책

QT-Interest 메일 링리스트에 대한 답변 덕분에 이것은 매우 간단합니다. QWidget.raise():

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

PYQT에서는 그렇습니다 QWidget.raise_():

http://pyqt.sourceforge.net/docs/pyqt4/qwidget.html#raise

다른 팁

나를 위한:

dock2.show ();

dock2.raise ();

충분했습니다. 그러나 네, 둘 다 필요합니다!

나는 이것을 테스트하지 않았지만 QT 4.5+에서 시도 할 내용은 다음과 같습니다 (PYQT 변환을 당신에게 맡길 것입니다).

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() 그리고 QMainWindow::tabifyDockWidget().

이것은 나에게 효과가 없었습니다.

dock2.raise_() 

나는 그것을 사용하여 작동하게했다 :

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

위젯에 초점을 설정하고 배경에 TAPIDED QDOCKWIDGET에 남겨 두지 않는 솔루션을 찾고 있다면 사용할 수 있습니다. 가시성 변화 신호 그리고 a 초점 프록시 이와 같이:

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)

약간의 작업 예 :

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

나를 위해 일하는 솔루션은 다음과 같습니다.

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

그 3 가지 기능이 필요해 보입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top