Tôi nghĩ rằng bố cục chỉ là một tiện ích giữ nhiều tiện ích bên trong. Nhưng bây giờ tôi thấy rằng tôi không thể thêm nó vào các widget khác bằng cách sử dụng addWidget. Ví dụ cách thêm bố cục vào QSplitter?Qt: sự khác nhau giữa bố cục và tiện ích con là gì?
Trả lời
QWidget đã hỗ trợ bố cục thông qua các chức năng layout()
và setLayout(...)
. Đối tượng bố trí điều khiển vị trí của các tiện ích con khác nhau có thể được thêm vào bố cục. Ngoài ra, nó đảm bảo kích thước chính xác kích thước phụ tùng của nó dựa trên số constraints được chỉ định. Nếu bố cục chưa có tiện ích con, thì ngay sau khi bố cục được đính kèm với tiện ích con có số setLayout()
, nó sẽ đặt kích thước của tiện ích mẹ đó.
Nhưng, một số tiện ích giống trình quản lý bố cục hơn một tiện ích con, chẳng hạn như QSplitter và QTabWidget. Hãy xem xét, ví dụ, QSplitter. Mặc dù một tiện ích duy nhất, nó trình bày hai khu vực khác nhau có thể được làm việc với. Trong trường hợp này, một trình quản lý bố cục duy nhất cho hai khu vực khác nhau không thực sự hợp lý. Giống như QSplitter, QTabWidget có một số hành vi mà làm cho một bố trí duy nhất không chỉ không cần thiết nhưng không hữu ích.
Tôi nghĩ rằng đó là sự kết hợp giữa bố cục và tiện ích con khiến việc tách bố cục và tiện ích đôi khi gây nhầm lẫn.
Không, bố cục không phải là tiện ích hoặc vùng chứa. Bố cục giống như "người trợ giúp" được gắn vào cửa sổ và tìm ra nơi tốt nhất để đặt từng tiện ích.
Ví dụ này từ các tài liệu Qt sẽ giúp (http://qt.nokia.com/doc/4.2/layout.html):
QWidget *window = new QWidget;
QPushButton *button1 = new QPushButton("One");
QPushButton *button2 = new QPushButton("Two");
QPushButton *button3 = new QPushButton("Three");
QPushButton *button4 = new QPushButton("Four");
QPushButton *button5 = new QPushButton("Five");
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(button1);
layout->addWidget(button2);
layout->addWidget(button3);
layout->addWidget(button4);
layout->addWidget(button5);
window->setLayout(layout);
window->show();
QLayout
s là các nhà quản lý bố trí. Họ quản lý việc định vị và thay đổi kích thước của các widget bên trong một widget phụ huynh. Từ tài liệu:
Bố cục là cách thanh lịch và linh hoạt để tự động sắp xếp tiện ích con trong vùng chứa của chúng. Mỗi tiện ích con báo cáo yêu cầu kích thước của nó cho bố cục thông qua các thuộc tính sizeHint và sizePolicy và bố cục phân phối không gian có sẵn cho phù hợp.
Ví dụ: đặt bố cục tiện ích thành QHBoxLayout
sẽ dẫn đến các tiện ích con được đặt theo chiều ngang.
Bạn có thể đọc thêm về nó here.
- 1. Sự khác nhau giữa tiện ích mở rộng Firefox và tiện ích bổ sung Firefox là gì?
- 2. Qt: Cùng một tiện ích bên trong hai bố trí khác nhau
- 3. Sự khác nhau giữa fill_parent và wrap_content là gì?
- 4. Qt Tạo bố cục và thêm tiện ích vào bố cục động
- 5. PySide: Xóa tiện ích khỏi bố cục
- 6. Sự khác biệt giữa các bố cục blobstorage ZODB khác nhau là gì?
- 7. Giới thiệu về xóa, xóa tiện ích và bố cục trong Qt 4
- 8. Sự khác nhau giữa NSLayoutAttributeBaseline và NSLayoutAttributeBottom là gì?
- 9. Sự khác nhau giữa @id và @ + id là gì?
- 10. Sự khác nhau giữa osql, isql và sqlcmd là gì?
- 11. Sự khác nhau giữa các sự kiện logic và sự kiện gốc trong GWT là gì?
- 12. sự khác nhau giữa Executor và ExecutorService là gì?
- 13. Sự khác nhau giữa BufRead và BufEnter là gì?
- 14. Sự khác nhau giữa NSCFString và NSConstantString là gì?
- 15. Sự khác nhau giữa objc_exception_throw và [NSException raise] là gì?
- 16. Sự khác nhau giữa NHibernate và iBATIS.NET là gì?
- 17. Bố cục giữa các khoảng cách khác nhau: 'hbox' và bố cục: 'column'
- 18. Qt Hiển thị/Ẩn hình động của tiện ích con
- 19. Sự khác nhau giữa HTTP_CLIENT_IP và HTTP_X_FORWARDED_FOR là gì?
- 20. Sự khác nhau giữa Policy15 và Policy12 là gì?
- 21. Sự khác nhau giữa "||" là gì và "hoặc" trong Perl?
- 22. Sự khác nhau giữa IDbSet.Add và DbEntityEntry.State = EntityState.Added là gì?
- 23. Sự khác nhau giữa con trỏ float và địa chỉ con trỏ int là gì?
- 24. Sự khác nhau giữa angularjs và dust.js là gì?
- 25. Sự khác nhau giữa RSpec và Cucumber là gì?
- 26. Sự khác nhau giữa các thư viện OpenGL, GTK và QT là gì?
- 27. Sự khác nhau giữa logicalDpiX và physicalDpiX trong Qt là gì?
- 28. Sự khác nhau giữa VCS và SCM là gì?
- 29. Sự khác nhau giữa Ctrl-C và SIGINT là gì?
- 30. Sự khác nhau giữa isSaleable() và isAvailable() là gì?
Nếu bạn sử dụng ngôn ngữ của mẫu thiết kế Model-view-controller. Có đúng không khi nói rằng "bố cục" là bộ điều khiển? hoặc bạn không thể liên hệ điều này với mẫu thiết kế "model-view-controller"? –