Ответ 1
Благодаря ответу на список рассылки qt-interest это очень просто сделать с QWidget.raise()
:
http://qt-project.org/doc/qt-4.8/qwidget.html#raise
В PyQt это QWidget.raise_()
:
У меня есть три 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 и перенести его на передний план?
Благодаря ответу на список рассылки qt-interest это очень просто сделать с QWidget.raise()
:
http://qt-project.org/doc/qt-4.8/qwidget.html#raise
В PyQt это QWidget.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()
.
Решение, которое работает для меня, это:
tabifyDockWidget (dock1, dock2)
dock2.setVisible(True)
dock2.setFocus()
dock2.raise_()
Эти 3 функции кажутся необходимыми.
Это не сработало для меня:
dock2.raise_()
Мне удалось заставить его работать, используя:
dock2.show()
parent.tabifyDockWidget(dock1, dock2)