Tôi đã thiết kế bố cục trong QML để tìm hiểu thêm về các tính năng của nó và có một số câu hỏi về "Phương pháp hay nhất" trong thiết kế bố cục như vậy. Ở đây là:Cách thiết kế bố cục chất lỏng đa cấp trong QML
cơ bản Đây là một ColumnLayout gồm ba RowLayout s, mỗi người với một số Rectangle s. Kích thước của mỗi Row và Rectangle nên được tính toán như:
- hàng đầu tiên: Chiều cao = 40%, Width = 100%
- Red Rectangle điền toàn bộ khu vực
- Thứ hai liên tiếp : Chiều cao = 20%, Width = 100%
- Dark-xanh Rectangle: Chiều cao = 100%, Width = 20%,
- Rectangle Light-xanh: Height = 100%, Width = 80%
- thứ ba liên tiếp: Chiều cao = 40%, Width = 100%
- Dark-xanh Rectangle: height = 100%, Width = 40%,
- xanh Rectangle: Chiều cao = 100%, Width = 20%
- Light-xanh Rectangle: Chiều cao = 100%, Width = 40%
Các QML tôi đã nảy ra đang làm việc và là trong những điều sau đây. Tôi có một số câu hỏi về nó:
- tôi đã thiết lập chiều rộng và chiều cao tỷ lệ sử dụng Layout.preferredHeight: x * parent.height mẫu. Các tùy chọn khác đã gây ra một số vấn đề (ví dụ: fancyHeight đã gây ra cảnh báo vòng lặp ràng buộc). Cách tiếp cận của tôi có chính xác và hiệu quả không?
- Là một hack, tôi đặt Bố cục.fillWidth: true cho thành phần đầu tiên của Hàng số 2 và Hàng số 3, điều này không có ý nghĩa đối với tôi, nhưng hoạt động. Nếu tôi đặt chiều rộng của chúng thành phần trăm (ví dụ: Bố cục.preferredWidth: 0.2 * parent.width) hàng của chúng sẽ thu gọn thành độ rộng 0. Đây có phải là hành vi mong đợi không? Có cách giải quyết nào tốt hơn không?
- Bạn có đề xuất nào về bố cục không? Tôi đang đi đúng hướng chứ?
Đây là mã QML của tôi cho bố trí:
ApplicationWindow {
x: 500
y: 100
width: 250
height: 150
visible: true
ColumnLayout {
anchors.fill: parent
spacing: 0
RowLayout {
spacing: 0
Layout.preferredHeight: 0.4*parent.height
Layout.fillHeight: false
Rectangle {
Layout.fillHeight: true
Layout.fillWidth: true
color: "red"
}
}
RowLayout {
spacing: 0
Layout.preferredHeight: 0.2*parent.height
Layout.fillHeight: false
Rectangle {
Layout.fillHeight: true
Layout.fillWidth: true
color: "darkGreen"
}
Rectangle {
Layout.fillHeight: true
Layout.preferredWidth: 0.8*parent.width
color: "lightGreen"
}
}
RowLayout {
spacing: 0
Layout.preferredHeight: 0.4*parent.height
Layout.fillHeight: false
Rectangle {
Layout.fillHeight: true
Layout.fillWidth: true
color: "darkBlue"
}
Rectangle {
Layout.fillHeight: true
Layout.preferredWidth: 0.2*parent.width
color: "blue"
}
Rectangle {
Layout.fillHeight: true
Layout.preferredWidth: 0.4*parent.width
color: "lightBlue"
}
}
}
}
Cập nhật:
Tiếp cận của tôi có vẻ là hacky nhiều hơn tôi mong đợi:
- Đưa chữ yếu tố khi trẻ em trong bố cục này tăng liên kết ing vòng cảnh báo như:
QML QQuickLayoutAttached: Ràng buộc vòng lặp phát hiện cho thuộc tính "preferredWidth"
Nếu một chữ bọc bên trong một Rectangle những lời cảnh báo biến mất.
- Các khoảng cách: 0 dường như đóng một vai trò quan trọng. Bỏ qua nó sẽ gây ra cảnh báo vòng lặp ràng buộc.
Trong khi cách tiếp cận thiết kế bố cục lỏng trong QML hoạt động, nó có một số vấn đề nghiêm trọng và có thể không nằm trong "thực tiễn tốt nhất".
Bạn có thể hiển thị vị trí trong tài liệu về ** Layout.preferredXXX ** không? Nó không giống như một tài sản QML và tôi không thể tìm thấy trong tài liệu của Qt5.4. – danielfranca
Đây là tài liệu cho thuộc tính tôi đang sử dụng: http://doc.qt.io/qt-5/qml-qtquick-layouts-layout.html. BTW, tôi vẫn nhận được vòng lặp _Binding phát hiện cho thuộc tính "preferHeight" _ cho các bố trí phức tạp hơn có nghĩa là cách tiếp cận của tôi chắc chắn có một số sai sót. – Isaac
Tôi đã nhận được các cảnh báo loop_ trên một bố cục khác được tạo bằng cách sử dụng phương pháp này. Dường như khoảng cách **: 0 ** đóng một vai trò trong việc tránh cảnh báo này. Đặt nó thành 0 khiến một số cảnh báo biến mất. – Isaac