2009-08-17 4 views
10

У меня есть три QDockWidgets, которые загружаются при запуске с использованием QMainWindow.tabifyDockWidget.Сосредоточение на табулированном QDockWidget в PyQt

В главном окне, после того, как все addDockWidget звонков:

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

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

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

ответ

2

Я не проверял это, но вот что я хотел бы попробовать в 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().

+0

Это, безусловно, работает, единственная проблема в том, что она упорядочивает лапок, является не- идеально. До сих пор кажется, что это только решение ... спасибо за фрагмент. – brianz

0

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

tabifyDockWidg и др (dock1, dock2)

dock2.setVisible (True)

dock2.setFocus()

dock2.raise_()

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

3

Для меня:

dock2.show();

dock2.raise();

было достаточно. Но да, оба нужны!

0

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

dock2.raise_() 

мне удалось получить его работу с помощью:

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

 Смежные вопросы

  • Нет связанных вопросов^_^