2010-02-10 26 views
6

Tôi đang sử dụng Qt/C++ và cố gắng vẽ một QGraphicsScene lớn và phức tạp. Khi tôi thêm nhiều đối tượng, việc xoay và thu phóng trở nên chậm chạp một cách khó chịu. (Không ngạc nhiên ở đây, tất nhiên). Tôi đã chơi với thiết bị phối hợp bộ nhớ đệm (giúp với panning đến một điểm) và cập nhật viewport tối thiểu và như vậy, nhưng cuối cùng chỉ có quá nhiều đối tượng. Những gì tôi muốn làm là vẽ các mục không đồng bộ từ việc kiểm soát giao diện người dùng bằng cách nào đó. Nói cách khác, giống như Google Maps, tôi muốn xoay và thu phóng và để bản vẽ bắt kịp nhanh nhất có thể, nhưng để có thể xoay lại trước khi các mục vẽ xong.Tôi làm cách nào để triển khai cuộn lát kiểu tương tự như Google Maps trong Qt?

Một phương pháp tôi đang cố gắng là tạo hai QGraphicsScenes. Một có các đối tượng thực tế nhưng không được gắn vào QGraphicsView. Các QGraphicsScene khác được kết nối với QGraphicsView, nhưng nó chỉ có một số QPixmaps lát có kích thước để che màn hình. Kế hoạch này là sử dụng các chu kỳ CPU dự phòng để cập nhật bất kỳ ảnh bitmap nào cần đến nó. Điều này có vẻ như nó sẽ cung cấp cho tôi sự kiểm soát cần thiết để hiển thị (vì vậy tôi không phải chặn trong khi tái hiển thị toàn bộ cảnh có thể nhìn thấy). Suy nghĩ? Có ai đã thực hiện điều này không?

Trả lời

3

Hãy xem tại đây: Generating content in threads.

Có vẻ như điều này giống với những gì bạn đang cố gắng làm. Cơ chế lát là cách rất phổ biến để tải với số lượng lớn dữ liệu. Khác với liên kết được đăng, tôi chưa thấy một ví dụ đơn giản sử dụng QGraphicsView.

40000 Chips cũng hiển thị một số điều về việc quản lý lượng dữ liệu lớn.

+0

Tôi đã thấy "40000 Chip" - sự hiểu biết của tôi về ví dụ đó là kỹ thuật triển khai "Cấp chi tiết" đẹp, trong đó chỉ có một mục trong QGraphicsScene cho mỗi chip, nhưng sơn() của chip vẽ chi tiết bổ sung nếu thu phóng vượt quá các ngưỡng khác nhau. Liên kết bạn cung cấp có vẻ rất phù hợp. Tôi sẽ thử nó một cách chi tiết ngay sau khi tôi có cơ hội ... Cảm ơn! –

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