2012-12-24 32 views
11

Tôi tạo một tùy chỉnh QGraphicsItem. Và ghi đè boundingRect()paint().qtransform trong QGraphicsScene :: itemAt()

QRectF myTile::boundingRect() const 
{ 
    return QRectF(xPos*10, yPos*10, 10, 10); 
} 

void myTile::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) 
{ 
    QRectF rec = boundingRect(); 
    int gvi = value * 255; 
    QColor gv(gvi, gvi, gvi, 255); 
    QBrush brush(gv); 
    painter->fillRect(rec, brush); 
    painter->drawRect(rec); 
} 

Sau đó, tôi sử dụng addItem() để thêm mục vào cảnh. Bây giờ tôi muốn lấy nó từ hiện trường theo vị trí của nó. Tôi tìm thấy hàm itemAt. Nhưng vấn đề là tôi không biết const QTransform & deviceTransform là gì. Tôi nên sử dụng cái gì cho QTransform?

Vì tôi không triển khai bất kỳ biến đổi nào trong số QGraphicsItem. Điều này làm tôi bối rối.

Trả lời

4
QGraphicsItem * QGraphicsScene::itemAt (const QPointF & position, const QTransform & deviceTransform) const 

Trả về mục có thể nhìn thấy trên cùng ở vị trí chỉ định, hoặc 0 nếu không có mục tại vị trí này. deviceTransform là chuyển đổi áp dụng cho chế độ xem và cần được cung cấp nếu cảnh có chứa các mục bỏ qua biến đổi. Chức năng này được giới thiệu trong Qt 4.6.

Vì vậy, tôi sẽ nói, nếu bạn có nhu cầu chuyển đổi một số mặt hàng và bỏ qua những người khác, bạn chỉ có thể đi với giá trị mặc định của QTransform() hoặc thậm chí tốt hơn các QGraphicsView::transform() const.

soo dài zai

+0

Mặc dù QGraphicsScene có thể có nhiều chế độ xem. Vì vậy, giá trị của 'deviceTransform' phụ thuộc vào ngữ cảnh. Ví dụ, trong trình xử lý sự kiện chuột, bạn sẽ phải tìm ra từ chế độ xem sự kiện đến từ đâu. Xem [bình luận này] (http://stackoverflow.com/questions/16919819/itemat-not-returning-custom-qgraphicsitem#comment24426364_16921083). –