2009-08-17 29 views
10

Tôi có ba QDockWidgets được gắn thẻ khi khởi động bằng cách sử dụng QMainWindow.tabifyDockWidget.Tập trung vào một QDockWidget được phân loại trong PyQt

Trong cửa sổ chính, sau khi tất cả các cuộc gọi addDockWidget:

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

Dựa trên những hành động nhất định, tôi muốn chọn một trong các tab và đưa nó vào tập trung, hoặc, trên đỉnh hai thứ khác, nếu nó chưa được nhìn thấy. Tôi đã thử sử dụng setVisiblesetWindowState(Qt.WindowActive), nhưng không có gì thay đổi.

Có cách nào để chọn theo chương trình một tiện ích con tab được gắn thẻ và đưa nó lên phía trước không?

Trả lời

2

tôi đã không kiểm tra này, nhưng đây là những gì tôi sẽ cố gắng trong Qt 4.5+ (Tôi sẽ rời khỏi chuyển đổi PyQt với bạn):

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) ; 
    } 
} 

Xem QMainWindow::tabifiedDockWidgets()QMainWindow::tabifyDockWidget().

+0

này chắc chắn công trình, vấn đề duy nhất là nó sắp xếp lại các tab đó là phi lý tưởng. Cho đến nay, có vẻ như đây chỉ là giải pháp ... cảm ơn cho đoạn mã. – brianz

0

Một giải pháp đang hoạt động cho tôi là:

tabifyDockWidg et (dock1, dock2)

dock2.setVisible (True)

dock2.setFocus()

dock2.raise_()

Đó 3 chức năng dường như cần thiết.

3

Đối với tôi:

dock2.show();

dock2.raise();

là đủ. Nhưng có, cả hai đều cần thiết!

0

này không làm việc cho tôi:

dock2.raise_() 

tôi quản lý để làm cho nó làm việc sử dụng:

dock2.show() 
parent.tabifyDockWidget(dock1, dock2) 
Các vấn đề liên quan