2009-07-20 35 views
7

Tôi đã được đùa giỡn với đoạn mã này:Tại sao QGraphicsItem :: scenePos() vẫn tiếp tục quay (0,0)

QGraphicsLineItem * anotherLine = this->addLine(50,50, 100, 100); 
qDebug() << anotherLine->scenePos(); 

QGraphicsLineItem * anotherLine2 = this->addLine(80,10, 300, 300); 
qDebug() << anotherLine2->scenePos(); 

Trong trường hợp con trỏ this đề cập đến một QGraphicsScene. Trong cả hai trường hợp, tôi nhận được QPointF(0,0) cho cả hai đầu ra.
Từ khi đọc tài liệu, tôi nghĩ scenePos() được cho là sẽ trả về vị trí của dòng trong cảnh, không phải vị trí của nó trong hệ tọa độ cục bộ của nó. Tôi đang làm gì sai?

Trả lời

17

Sau khi đọc tài liệu QT 4.5 cẩn thận trên addLine, tôi nhận ra những gì tôi đã làm sai. Theo doc:

Lưu ý rằng hình học của mặt hàng đó được cung cấp trong mục tọa độ, và vị trí của nó được khởi tạo (0, 0)

Vì vậy, nếu tôi chỉ định addLine (50,50 , 100, 100), tôi đang thực sự sửa đổi tọa độ mục địa phương của nó. Giả định tôi đã làm rằng nó sẽ được coi là một phối cảnh là sai hoặc vô căn cứ. Những gì tôi nên làm là này

// Create a line of length 100 
QGraphicsItem * anotherLine = addLine(0,0, 100, 100); 

// move it to where I want it to be within the scene 
anotherLine->setPos(50,50); 

Vì vậy, nếu tôi thêm một dòng bằng cách vẽ trong hiện trường, tôi cần phải thiết lập lại trung tâm của nó đến (0,0) sau đó sử dụng setPos() để di chuyển nó đến nơi tôi muốn nó ở hiện trường.

Hy vọng điều này sẽ giúp bất kỳ ai vấp ngã cùng một vấn đề.

+0

Tôi đã dành một buổi chiều để tìm hiểu điều này! Cảm ơn bạn rất nhiều! (ngay cả khi chủ đề này là 3 tuổi) – HWende

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