(Tôi sử dụng Qt 4.7, Windows 7, 64bit).Giới thiệu về xóa, xóa tiện ích và bố cục trong Qt 4
Tôi đã tạo bảng tùy chỉnh. Mỗi hàng là một bố cục nằm ngang với các widget. Các hàng được giữ trong một Danh sách cho phép truy cập dễ dàng và các trẻ em cũng vậy. Các hàng cũng được thêm vào trong phụ huynh.
Nếu tôi đổi kích thước tiện ích con, tôi tính toán kích thước mới, xóa mọi thứ và tạo lại.
Vấn đề của tôi là tôi không muốn xóa bất kỳ tiện ích nào. Chỉ khi tôi dọn bàn, tôi làm.
Vì tôi có các tiện ích bên trong QList và bên trong bố cục gốc, Làm thế nào tôi có thể xóa tất cả các tiện ích trong mỗi hàng, xóa tất cả bố cục và sau đó thêm các bố cục đó vào bố cục mới?
Nếu tôi làm: takeAt (0) cho mọi phần tử bên trong mỗi bố cục, tôi có một QLayoutItem với một tiện ích bên trong ... Làm cách nào để xóa layoutItem mà không xóa tiện ích? .... Làm cách nào để xóa tiện ích con mà không giết chết nó, không có vấn đề nếu nó ở trong cha mẹ hoặc đứa trẻ? Vì có nhiều phương thức xóa: removeItem, removeWidget ... trong layout, nhưng không dùng takeWidget ... chỉ cần takeAt() và nó cho Qlayoutitem.
Tôi đã thử một số cách, nhưng tôi vẫn thấy các tiện ích bất kể điều gì đã xảy ra với chúng.
câu hỏi về vấn đề này:
Khi nào một widget được xóa? Nếu tôi takeWidget (index) từ một layout, nó có bị xóa một thời gian không? nó xảy ra nếu tôi có một con trỏ đến nó trong một danh sách khác?
removeAt (index) thực hiện phương pháp xóa của tiện ích con?
bố cục() -> removeAt (tiện ích con); CHỈ tồn tại cho QGraphicsLayout. Những gì bạn có nghĩa là có lẽ bố trí() -> removeWidget (widget); – Bim
Đó cũng là những gì bạn có thể làm để xóa tiện ích con khỏi bố cục KHÔNG xóa nó.Nếu bạn không có con trỏ widget, hãy làm như sau: QLayoutItem * item = layout-> itemAt (0); QWidget * widget = item-> widget(); if (widget! = NULL) { bố cục-> removeWidget (tiện ích con); // nếu bạn muốn xóa tiện ích con, hãy làm: widget-> setParent (NULL); xóa tiện ích con; } (định dạng không hoạt động, nhưng bạn có ý tưởng ...) – Bim
FYI: Điều này không hợp lệ trong Python vì bạn cũng phải xử lý đối tượng C++ bên trong. – darkgaze