2011-10-11 39 views
5

Tôi đang sử dụng QGraphicsPolygonItem và tôi đã nhận thấy rằng nó luôn kết nối điểm cuối với điểm bắt đầu.QGraphicsPolygonItem vẽ một đa giác mở (không đóng)

Tôi biết rằng các thuật ngữ đa giác có nghĩa là chính xác điều đó và những gì tôi đang tìm kiếm là "polyline" hoặc "chuỗi đa giác". Tôi đã không tìm thấy gì giống như vậy trong các lớp con QGraphicsItem.

Làm cách nào để vẽ một chuỗi đa giác trong khung QGraphics? Có một thuộc tính của QGraphicsPolygonItem hoặc một lớp nào đó?

Trả lời

3

Bạn có thể sử dụng QPainterPath và sử dụng phương thức lineTo để nhập các điểm polyline yors, sau đó chỉ cần sử dụng QGraphicsPathItem để tạo mục đồ họa. Ngoài ra, bạn cũng có thể nghĩ đến việc kết hợp một số QGraphicsLineItem thành một QGraphicsItemGroup, nhưng điều đó khó khăn hơn khi bạn cần chú ý đến việc sắp xếp các đường thẳng với nhau.

Đây có phải là những gì bạn đang tìm kiếm không?

CHỈNH SỬA:

QPainterPath dường như đang đóng đường dẫn, sau đó bạn chỉ còn lại một nhóm dòng.

EDIT2:

Xin lỗi vì gây nhầm lẫn bạn, nhưng HostileFork dường như là đúng - bạn chỉ cần sử dụng QPainterPath và gọi pathItem->setBrush(QBrush(Qt::transparent)); để giữ con đường của bạn không hàn.

+0

QPainterPath không tự động đóng đường dẫn, do đó, sử dụng một chuỗi lineTo và moveTo có lẽ là cách tiếp cận tốt nhất. Bạn có thể bị nhầm lẫn vì điền? Nếu bạn không muốn điền, bạn phải gọi 'pathItem-> setBrush (QBrush (Qt :: transparent));' – HostileFork

2

Tôi đã gặp sự cố tương tự và tôi đã giải quyết vấn đề này bằng cách sử dụng lớp QGraphicsPathItem. Trong đoạn mã sau, đa giác là một đối tượng không đóng QPolygonF (tức là một QPolygonF mà khởi điểm là khác nhau từ điểm kết thúc của nó):

QPainterPath path = new QPainterPath(); 
path.addPolygon(polygon); 
QGraphicsPathItem contour = new QGraphicsPathItem(path); 
contour.setPen(new QPen(QColor.black)); 

Khi hiển thị đối tượng QGraphicsPathItem này, khởi điểm là (theo lý thuyết) bị ngắt kết nối từ điểm cuối của nó.

Tôi xin lỗi mã ví dụ này bằng Java; nhưng các cơ chế phải giống như trong C++.

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