2011-01-09 33 views
5

Tôi muốn tùy chỉnh thanh tiêu đề của QMdiSubWindow. Vì tôi sử dụng qss.Làm thế nào để tùy chỉnh thanh tiêu đề của QMdiSubWindow bằng qss?

QMdiSubWindow { border: 1px solid #000000; background: #000000 } 
QMdiSubWindow:title { background: #000000 } 

Vấn đề là khi áp dụng qss này, biểu tượng cửa sổ biến mất. Tôi biết nó có thể xác định các biểu tượng trong QSS cho một QDockWidget

QDockWidget { ... titlebar-close-icon: url(myCloseIcon.png); ... } 

Tuy nhiên tôi không thể tìm thấy một cách để xác định nó cho một QMdiSubWindow. Có lẽ cách này không tồn tại. Bạn có biết điều đó có khả thi không?

+0

Đây là vấn đề trong nhiều năm nay. Có cách giải quyết nào để tạo kiểu cho trẻ MDI không? – cytrinox

Trả lời

1

Kể từ Qt 5.2 bạn không thể; chưa kiểm tra 5.3 nhưng AFAIK họ đã không thay đổi bất kỳ điều gì trong số QMdiArea/QMdiSubWindow trong bản phát hành 5.3.

Giải pháp đơn giản nhất mà bạn có là sử dụng QCommonStyle và vẽ thanh tiêu đề bằng cách sử dụng QPainter. Để biết thêm thông tin về việc xem tài liệu QCommonStyleQStyle. Xin lưu ý rằng bạn nên lấy số QCommonStyle và không được QStyle cho lớp phong cách của mình. QCommonStyle được thừa kế QStyle để bạn không bị mất bất kỳ thứ gì.

Và nếu bạn muốn đạt được hiệu ứng phức tạp hơn như thả bóng trên cửa sổ phụ sau đó lựa chọn duy nhất bạn đã để lại ở đây là để lấy được QMdiSubWindowQMdiArea, gọi QWidget::setWindowFlags(Qt::FramelessWindowHintflag) trên lớp có nguồn gốc QMdiSubWindow và thực hiện từ đầu subwindow của riêng bạn với thanh tiêu đề của riêng bạn. Sau đó, bạn có thể xác định Q_PROPERTY s của riêng mình theo loại QColor và truy cập những từ QSS như tiếp xúc here để tùy chỉnh màu sắc của thanh tiêu đề từ QSS.

Một tùy chọn khác là tạo tiện ích vùng MDI mới từ đầu nhưng tôi không nghĩ rằng điều này có thể áp dụng được trong trường hợp của bạn. Nếu bạn chỉ cần tùy chỉnh thanh tiêu đề bằng cách sử dụng một phong cách tùy chỉnh là cách tiếp cận tốt nhất bạn có thể giải quyết. Nếu các ví dụ rắc rối có thể được cung cấp dưới dạng bản chỉnh sửa cho bài đăng này.

Nhưng nếu bạn muốn tùy chỉnh tiêu chuẩn QMdiSubWindow chỉ sử dụng QSS, rất tiếc là hiện tại không thể thực hiện được.

+1

Dường như là một giải pháp tốt, cảm ơn. – cytrinox

Các vấn đề liên quan