2010-02-18 27 views
5

Tôi hiện có một hệ thống phân cấp các hạng mục dựa trên QGraphicsItem.Hình phạt sử dụng QGraphicsObject vs QGraphicsItem?

Tôi muốn chuyển sang QGraphicsObject để tôi có thể đặt các thuộc tính vào các mục của mình. Tôi sẽ không sử dụng tín hiệu/khe hoặc bất kỳ tính năng nào khác của QObject.

Tôi được thông báo rằng bạn không nên xuất phát từ QObject vì nó "nặng" và "chậm".

Để kiểm tra tác động, tôi lấy được từ QGraphicsObject, thêm một vài thuộc tính vào các mục của tôi và xem mức sử dụng bộ nhớ của ứng dụng đang chạy. Tôi tạo ra 1000 mặt hàng bằng cách sử dụng cả hai hương vị và tôi không nhận thấy bất cứ điều gì hơn 10k sử dụng bộ nhớ nhiều hơn nữa.

Vì tất cả những gì tôi thêm vào mục của mình là thuộc tính, có an toàn khi nói rằng QObject chỉ thêm trọng lượng nếu bạn đang sử dụng tín hiệu/vị trí không?

Trả lời

3

Tôi nghĩ điều đó phụ thuộc vào ý bạn là cân nặng. Nếu bạn không lo lắng về bộ nhớ bổ sung cần thiết cũng không phải tất cả các phương pháp bổ sung và những thứ đi kèm với QObject, mà âm thanh như hành lý trong trường hợp của bạn, sau đó có. Tuy nhiên, nếu tất cả những gì bạn cần là một cách để lưu trữ một số thông tin bổ sung, tại sao không phân lớp QGraphicsItem và thêm một phương thức hoặc hai cho phép bạn lưu trữ dữ liệu cần thiết? Bằng cách đó, tôi nghĩ bạn sẽ giao tiếp tốt hơn ý định mã của bạn, điều này có vẻ quan trọng hơn tất cả những điều trên.

0

Hiệu suất hoạt động như thế nào? Có thêm chi phí trong QGraphicsObject khi gọi setX/setY, v.v. Bạn có thể vào QGraphicsItemPrivate :: setPosHelper và tìm thêm chi tiết.

1

@Mason Chang: Điều đó có ý nghĩa, nhưng nếu phát ra tín hiệu xảy ra khi sử dụng QGraphicsObject là điều làm cho QGraphicsObjects chậm hơn QGraphicsItems, thì bạn có thể tránh điều này bằng cách kế thừa từ QObject và QGraphicsItem thay vì sử dụng QGraphicsObject. Bằng cách đó, bạn có thể xác định tín hiệu và vị trí nhưng bạn không nhận được các tín hiệu phát ra tự động mà bạn không quan tâm.

Điều này có ý nghĩa và cung cấp nền tảng trung bình hoạt động tốt giữa QGraphicsObject và QGraphicsItem không?

chỉnh sửa: được thực hiện a new question cho điều này có thể làm rõ hơn một chút

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