Tôi đang viết một ứng dụng Qt dựa trên canvas QGraphicsScene
có hình dạng di động trên đó và tôi đang cố gắng tích hợp chức năng hoàn tác làm lại. Đối với hầu hết các chức năng như tạo và xóa các hình dạng, nó khá tầm thường để thực hiện trên chính bản thân số QGraphicsScene
, nhưng tôi muốn các phần tử có thể di chuyển được và để chuyển động có thể hoàn tác được. Hiện tại tôi đang sử dụng tính năng dragmode của ban nhạc cao su trên cảnh và các cờ ItemIsSelectable
và ItemIsMovable
trên các mục. Vấn đề là dường như không có nơi tốt để tạo ra các QUndoCommand
để đại diện cho phong trào hình dạng. Nếu tôi làm điều đó trong phương thức QGraphicsScene::itemChange
, sau đó chọn và di chuyển hai hoặc nhiều hình dạng dẫn đến các lệnh hoàn tác riêng biệt cho các đối tượng khác nhau được xen kẽ và do đó không thể hợp nhất được, do đó, hoàn tác các kết quả trong hành vi không mong muốn. Không có sự kiện nào trong số QGraphicsScene
được gọi khi các mục của nó được di chuyển xung quanh mà tôi có thể thấy, vì vậy tôi bị kẹt.Qt: Tích hợp đúng khung hoàn tác với QGraphicsScene
Các trường hợp xấu nhất mà tôi nhìn thấy là tôi vô hiệu hóa các ItemIsMovable
cờ trên các đối tượng tùy chỉnh QGraphicsItem
tôi và xử lý chuyển động hoàn toàn trong QGraphicsScene
sự kiện chuột, nhưng reimplementing chức năng mà dường như đúng khá phức tạp (tôi đã kiểm tra như thế nào Qt làm nó trong nội bộ và có khá nhiều mã để xử lý các trường hợp phức tạp, chẳng hạn như nơi một đối tượng và một số con của nó đều được chọn). Điều này có vẻ như rõ ràng nhất trong trường hợp sử dụng cho ngăn xếp hoàn tác (rất nhiều để chương trình mẫu cho khung hoàn tác là một chương trình QGraphicsScene
giống như của tôi, ngoại trừ không có hỗ trợ chuyển động đối tượng nhiều). cách để làm điều đó mà không cần thực hiện lại một phần quan trọng của chức năng cốt lõi. Có ai có bất kỳ thông tin chi tiết hoặc ví dụ về các chương trình thực hiện việc này không?
Tôi đã đưa ra một bản sửa lỗi tương tự liên quan đến một ngăn xếp vị trí trước đó trong mỗi 'QGraphicsItem' và sau đó đẩy các mục đã được thay đổi sang ngăn xếp hoàn tác. Nó xấu nhưng nó hoạt động. Cảm ơn câu hỏi và câu trả lời. –