簡體   English   中英

Qt-更改QPixmap的不透明度

[英]Qt- Change opacity of QPixmap

如何改變QPixmap的不透明度?

我將圖像設置為背景實際上我想改變它的不透明度,這是我的代碼:

Call.h:

private:
    QPixmap m_avatar;

Call.cpp:

void Call::resizeEvent(QResizeEvent *e)
{
    QPalette pal = palette();
    pal.setBrush(backgroundRole(), m_avatar.scaled(e->size(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
    setPalette(pal);
}

我已經更改了resizeEvent函數,但它不會改變背景的不透明度。

void Call::resizeEvent(QResizeEvent *e)
{
    QPixmap result_avatar(m_avatar.size());
    result_avatar.fill(Qt::transparent);
    QPainter painter;
    painter.setOpacity(0.5);
    painter.begin(&result_avatar);
    painter.drawPixmap(0, 0, m_avatar);
    painter.end();
    QPalette pal = palette();
    pal.setBrush(backgroundRole(), result_avatar.scaled(e->size(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
    setPalette(pal);
}

有什么建議嗎?

您沒有使用本地QPainter對象。 根據QWidget事件

每當需要重新繪制窗口小部件時,都會調用paintEvent() 每個顯示自定義內容的小部件都必須實現 使用油漆QPainter只能發生在paintEvent()或一個被調用函數paintEvent()

在這里工作:

void Call::paintEvent(QPaintEvent *)
{
    // create a new object scaled to widget size
    QPixmap result_avatar = m_avatar.scaled(size());

    QPainter painter(this);
    painter.setOpacity(0.5);
    // use scaled image or if needed not scaled m_avatar
    painter.drawPixmap(0, 0, result_avatar);
}

在pixmap案例上更新paiting

如果只需要它與使用像素圖的一些不透明繪制QPainter ,不透明度必須后才設置QPainter活化QPainter::begin() 因此,在更改順序后,pixmap result_avatar有兩個圖像(一個用不透明度1調整大小,原始像素圖在頂部,不透明度為0.5):

QPainter painter;
painter.begin(&result_avatar);
painter.setOpacity(0.5);
painter.drawPixmap(0, 0, m_avatar);
painter.end()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM