2012-01-08 40 views
5

Khi tôi có QMainWindow với bố trí lưới, khi thay đổi kích thước bằng chuột, nó sẽ không dưới một số kích thước tối thiểu cần thiết cho tất cả các điều khiển trong đó hiển thị đúng cách . Trong ứng dụng của tôi, đôi khi tôi có thể ẩn các điều khiển một cách có lập trình, nhưng sau đó cửa sổ vẫn giữ nguyên kích thước và phần còn lại của các điều khiển trông rộng ra, với quá nhiều khoảng trống giữa chúng. Tôi kết thúc thay đổi kích thước hộp thoại theo cách thủ công để nó trông không xấu xí.Làm thế nào để thay đổi kích thước một QMainWindow thành kích thước tối thiểu

Tôi có thể thiết lập kích thước dọc của hộp thoại theo cách lập trình đến mức tối thiểu này khi tôi đã điều khiển ẩn trong hộp thoại không?

+0

+1 Tôi cũng thất vọng vì điều này. –

+0

Chỉ cần tìm ra, xem câu trả lời của tôi dưới đây. – sashoalm

Trả lời

0

Mã này sẽ làm các trick (nó thay đổi kích thước chỉ chiều cao):

QWidget widget; 
    widget.resize(widget.width(), widget.minimumHeight()); 
+0

Điều này khác với 'widget.resize (widget.width(), 1)?' Và có sự khác biệt nào giữa 0 và 1 không? (Tôi là một newbie, như bạn rõ ràng có thể nói.) –

+0

Bạn có nghĩa là widget.minimumHeight() trả về 0? Tôi đã giả định rằng nó trả về kích thước tối thiểu cần thiết cho tất cả các điều khiển để phù hợp, nhưng tôi đã không kiểm tra giá trị thực tế được trả về bởi hàm. – sashoalm

+0

Điều này rất hữu ích, khi sử dụng các widget dock, người ta có thể nhận được chiều cao của một widget dock trên/dưới và sau đó thiết lập kích thước tối thiểu của MainWindow đến chiều cao hiện tại trừ đi chiều cao của widget dock bạn muốn ẩn. – guitarpicva

1

Có cấu trúc phân cấp giữa QLayout::SizeConstraint, QWidget::minimumSizeHint, QWidget::minimumSize và bạn có thể tìm thấy nó trong tài liệu.

  • QWidget::minimumSize không được đặt theo mặc định. Khi nó tồn tại, nó chiếm ưu thế hơn QWidget::minimumSizeHint
  • QWidget::minimumSizeHint không hợp lệ nếu tiện ích con không được sắp xếp (có nghĩa là tiện ích có thể được đổi kích thước bằng 0), nếu không sử dụng bố cục được xác định bởi bố cục.
  • QLayout::SizeConstraint giữ hành vi bố cục mặc định của tiện ích con * trực tiếp * quản lý. Nếu bạn lồng bố cục A trong bố cục B, tất cả tiện ích được thêm vào A sẽ sử dụng thuộc tính của bố cục đó. Ngoài ra nếu một widget W trong B xác định bố cục riêng của nó, thì ràng buộc bố cục này là một trong những được áp dụng cho các widget W.

Biết rằng, hãy làm theo các bước sau. Nó có thể công việc, tôi đã không thử :):

  • Đặt kích thước tối thiểu của tất cả các tiện ích bạn sử dụng.
  • Đảm bảo rằng giới hạn kích thước của tất cả bố cục của bạn được đặt thành QLayout::SetDefaultConstraint.
2

Tôi đã phát hiện ra rằng thay đổi kích thước centralWidget trong QMainWindow sau đó thay đổi kích thước QMainWindow tự làm các trick. Nói cách khác:

from PyQt4 import QtGui 
class MyMainWindow(QtGui.QMainWindow): 
    def __init__(self): 
     # define some widgets and stuff 
    def whenWidgetsAreHidden(self): 
     # this method should be triggered when you hide your widgets 
     self.centralWidget.adjustSize() 
     self.adjustSize() 

Lưu ý rằng có các tiện ích con khác trong QMainWindowLayout. Theo hình ảnh này từ Qt Documentation, cũng có các Tiện ích con Dock và các nội dung khác có thể có mặt. Tôi chỉ sử dụng centralWidget để giải pháp này hoạt động cho tôi.

QMainWindow Layout

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