Фокусировка на табулированном QDockWidget в PyQt

У меня есть три QDockWidgets, которые загружаются при запуске с помощью QMainWindow.tabifyDockWidget.

В главном окне после всех вызовов addDockWidget:

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

Основываясь на определенных действиях, я бы хотел выбрать одну из этих вкладок и сфокусировать ее, или, поверх двух других, если она еще не видна. Я пробовал использовать setVisible и setWindowState(Qt.WindowActive), но ничего не изменилось.

Есть ли способ программно выбрать виджет с вкладкой dock и перенести его на передний план?

5 ответов

Благодаря ответу на список рассылки 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 ) ;
 }
}
</qdockwidget*>

См. QMainWindow::tabifiedDockWidgets() и QMainWindow::tabifyDockWidget().


Решение, которое работает для меня, это:

tabifyDockWidget (dock1, dock2)

dock2.setVisible(True)

dock2.setFocus()

dock2.raise_()

Эти 3 функции кажутся необходимыми.


Это не сработало для меня:

dock2.raise_()

Мне удалось заставить его работать, используя:

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

licensed under cc by-sa 3.0 with attribution.