2

QWidgetにアルファ透明マスクを割り当てることは可能ですか?を使ってマスクを設定する方法は知っていますsetMaskが、白黒マスクしかサポートしていないようです。真のアルファチャネルをサポートすることは可能ですか?

つまり、現在私は次のようなPNGを持っています:

ここに画像の説明を入力してください

そしてこのようなウィジェット:

ここに画像の説明を入力してください

PNGをQPixmapにロードし、それをマスクとして設定すると、次のようになります(エッジに注意してください)。

ここに画像の説明を入力してください

しかし、私はこれを取得したいと思います(滑らかなエッジ):

ここに画像の説明を入力してください

それを行う方法はありますか?

注:ウィジェットでより複雑な描画を行っていますが、これはマスク領域に制限する必要があるため、PNGをウィジェットの背景画像として単純に設定することはできません。

4

1 に答える 1

3

あなたの最善のルートはQPainterの作曲モードだと思います。

例えば:

QPixmap PixmapToBeMasked(Size);
PixmapToBeMasked.fill(QColor(255, 255, 255, 120));

QPixmap Mask = DoSomethingToGetAMask();

QPainter Painter(&PixmapToBeMasked);
Painter.setCompositionMode(QPainter::CompositionMode_DestinationIn);
Painter.drawPixmap(0, 0, Mask.width(), Mask.height(), Mask);

これで、ウィジェットの描画がうまく処理されます。それでもマウスイベントをマスクする必要がある場合は、追加の作業が必要になる場合があります。

于 2011-09-29T07:56:59.537 に答える