2012-12-19 35 views
5

Tôi vẽ vài hình chữ nhật bên trong QGraphicsView; Tôi sử dụng mẫu hình stipple tùy chỉnh cho các mẫu này bằng cách tạo một QBrush với QPixmap của tôi. Điều này được hiển thị với mức thu phóng mặc định như mong đợi.Làm thế nào để thực hiện qt qgraphicsview quy mô để không ảnh hưởng đến mô hình stipple?

Khi tôi gọi view->scale(), các hình chữ nhật hiển thị lớn hơn hoặc nhỏ hơn như tôi mong đợi. Tuy nhiên Qt đã thu nhỏ các bit riêng lẻ của mô hình stipple vốn không được mong đợi; Tôi mong đợi nó sẽ vẽ lại hình chữ nhật lớn hơn hoặc nhỏ hơn bằng cọ vẽ. Ví dụ: Nếu tôi đã sử dụng một mẫu hình gợn sóng với một pixel điểm ảnh và không gian pixel, sau khi phóng to, tôi muốn nhìn thấy một hình chữ nhật lớn hơn nhưng tôi muốn có cùng một kiểu vệt với cùng khoảng trống pixel. Điều này có thể đạt được bằng cách nào đó không? Cảm ơn.

Trả lời

5

Tôi đã gặp sự cố tương tự khi phát triển đồng hành công cụ EDA trong Qt.

Sau khi một số cố gắng, những gì tôi đã làm (và dường như làm việc cho tôi) là tạo một mục đồ họa tùy chỉnh. Trên phương pháp vẽ, tôi thực hiện:

QBrush newBrush = brush_with_pattern; 
newBrush.setTransform(QTransform(painter->worldTransform().inverted())); 
painter->setBrush(newBrush); 

Điều đó là áp dụng phép biến đổi nghịch đảo của mặt hàng thành bàn chải (do đó nó không mở rộng).

Tôi nghĩ rằng setDashOffset chỉ dành cho đường viền của các hình dạng (không phải điền).

+0

Nó sẽ không làm tương tự để thiết lập ItemIgnoresTransformations? – Schollii

0

Bạn có thể sử dụng QPen :: setDashOffset:

http://harmattan-dev.nokia.com/docs/library/html/qt4/qpen.html#setDashOffset

Bạn sẽ cần phải thiết lập dựa trên những cảnh zoom/mức độ quy mô bù đắp. Bạn có thể lấy một con trỏ đến cảnh trong mục của bạn bằng cách gọi cảnh(), đừng quên kiểm tra NULL mặc dù vì nó sẽ là NULL khi không được thêm vào cảnh (mặc dù bạn không nên trong lý thuyết có được một sơn() khi không ở trong một cảnh).

Các tùy chọn khác là sử dụng:

http://doc.qt.digia.com/qt/qpainter.html#scale

Để hoàn tác các quan điểm nhân rộng trên họa sĩ của bạn.

+0

Cảm ơn bạn đã trả lời. Tôi nghĩ rằng tôi đã không giải thích tốt. Tôi muốn kích thước của hình chữ nhật để mở rộng nhưng mô hình stipple vẫn giữ nguyên. – Kaniyan

+0

sử dụng setDashOffset sẽ đạt được kết quả đó, ví dụ ở 100% dấu gạch ngang có thể là 1, vì vậy ở 50% bạn có thể thay đổi 0,5 và mẫu sẽ trông giống nhau (nhưng chiều ngang sẽ nhỏ gấp đôi). – paulm

+0

Tôi đang sử dụng QBrush để đặt kiểu hình gợn sóng. Tôi đang tìm một phương pháp * Offset trong cọ vẽ. Không thể nhìn thấy. – Kaniyan

0

Trong trường hợp bất kỳ ai vẫn đang tìm kiếm điều này, a related question here liên quan đến việc chia tỷ lệ các mẫu điền chuẩn thay vì các mẫu điền pixmap có thể hữu ích. Về cơ bản, có thể không thể sửa đổi tỷ lệ các mẫu điền chuẩn (một vài ý tưởng giải pháp được liệt kê), nhưng, làm việc với các giá trị alpha thay cho hiệu ứng mong muốn nếu bạn đang tìm kiếm các màu khác nhau, đặc biệt là các mức xám - và ít hơn nhiều phức tạp.

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