2012-06-18 62 views
7

Tôi đang cố gắng vẽ hình chữ nhật nửa trong suốt ở đầu hình ảnh để làm điểm đánh dấu. Thật không may, không có gì tôi cố gắng dường như có thể thực hiện hiệu ứng trong suốt mà tôi muốn. Thay vào đó tôi chỉ nhận được hình chữ nhật đầy rắn, không có sự minh bạch.Làm cách nào để vẽ hình chữ nhật nửa trong suốt trong Qt?

Đây là những gì tôi đang làm ngay bây giờ:

void PageView::paintEvent(QPaintEvent *event) 
{ 
    QPainter painter(this); 
    QImage img=...; 

    painter.drawImage(0, 0, img); 
    ... 
    // draw a light blue, transparent rectangle to highlight 
    QRect rect=...; 
    painter.fillRect(rect, QColor(128, 128, 255, 128)); 
    ... 
} 

Thật không may, đối với tôi, điều này có vẽ một hình chữ nhật màu xanh rắn, thay vì một nửa trong suốt tôi mong đợi do đưa ra QBrush alpha giá trị.

Tôi cũng đã thử vẽ đến một số trung gian QImage hoặc QPixMap, phát xung quanh với painter.setCompositionMode(...). Không may mắn cho đến nay.

Vì vậy, câu hỏi của tôi: Làm thế nào tôi có thể thuyết phục Qt vẽ hình chữ nhật nửa trong suốt đến PageView của tôi?

CHỈNH SỬA: Nếu có liên quan, tôi đang tạo phiên bản này dưới Qt 4.8.1 trên Windows.

+0

Không có hàm tạo 'QBrush (r, g, b, a)' trong [Tài liệu Qt] (http://doc-snapshot.qt-project.org/4.8/qbrush.html). Ý bạn là 'QColor'? –

+0

Tôi đã làm, vâng. Lỗi của tôi. – Managu

+0

Đầy đủ 'PageView :: paintEvent' tại http://pastebin.com/Dj9dDd0c. Mặc dù tôi không nghĩ có gì thú vị trong những gì tôi bỏ qua. – Managu

Trả lời

13

Mã này làm việc cho tôi với một sửa đổi nhỏ vì nó không biên dịch như bạn có nó:

painter.fillRect(rect, QBrush(QColor(128, 128, 255, 128))); 

LƯU Ý:

Các OP đã vẽ hình chữ nhật bán minh bạch trong một vòng lặp gây cùng một khu vực được sơn nhiều lần. Điều này sẽ dẫn đến một hiệu ứng phụ gia mà cuối cùng sẽ gây ra khu vực đó trông giống như một điền rắn.

+0

Rightio, typeo trong quá trình gửi câu hỏi của tôi. Nhưng điều này tạo ra hình chữ nhật vững chắc cho tôi chứ không phải hình chữ nhật bán trong suốt. – Managu

+0

Bạn đã thử gọi 'fillRect()' như tôi có nó ở đây với một 'QBrush'? –

+0

Đã thêm hình dán đầy đủ tại http://pastebin.com/Dj9dDd0c – Managu

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