2017-08-21 27 views
6

Tôi không thể tìm được cách thích hợp để vẽ một đường thẳng nghiêng mà không bị quá pixel trong Qt với đối tượng QPainterPath.Làm mịn đường nghiêng

Lưu ý rằng tôi biết việc vẽ đường dẫn trong hàm paintEvent là không hợp lý, tôi đặt nó ở đó vì mục đích đơn giản. Tôi đang cố vẽ đường thẳng trực tiếp trong widget trung tâm.

Sau đây là một đoạn mã của tôi:

void MyObject::paintEvent(QPaintEvent *) 
{ 
    QPainterPath aPath; 
    aPath.moveTo(40.0, 60.0); //random values to try 
    aPath.lineTo(254, 354.0); 

    QPainter painter(this); 
    painter.setPen(QPen(QColor(20, 20, 200), 10, Qt::SolidLine)); 
    painter.drawPath(aPath); 
} 

Và đây là kết quả tôi nhận được:

enter image description here

Đó là khủng khiếp! Các đường nét đẹp duy nhất tôi có thể vẽ là các đường thẳng ngang, dọc hoặc 45 ° ...

Trả lời

4

Nếu bạn đang tìm chất lượng bản vẽ, tài liệu Qt cung cấp illustrative example (5.X version) về việc sử dụng cờ chất lượng hiển thị. Nói chung, bạn có thể sử dụng flags specified here (5.X version) và đặt chúng bằng cách sử dụng chức năng QPainter::setRenderHint() (5.X version). Xem liệu bạn có thể đạt được chất lượng mong muốn bằng các phương pháp đó không. Đối với mã của bạn, bạn sẽ tìm kiếm một cái gì đó như

QPainter painter(this); 
painter.setRenderHint(QPainter::SmoothPixmapTransform, true); 
painter.setRenderHint(QPainter::HighQualityAntialiasing, true); 
painter.setPen(QPen(QColor(20, 20, 200), 10, Qt::SolidLine)); 
painter.drawPath(aPath); 
+0

bạn nên bao gồm các phần có liên quan trực tiếp trong câu hỏi. Liên kết có thể phá vỡ bất cứ lúc nào – user463035818

+0

Tôi đã thêm một số mã cụ thể làm ví dụ, nhưng tài liệu Qt của bên thứ nhất đi vào chi tiết hơn tôi có thể viết ra ở đây – csunday95

+0

QPainter :: Antialiasing hint đã thực hiện thủ thuật. Cảm ơn, kết quả trông chính xác như tôi muốn. – Getter

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