私はいくつかの並べ替えの進行状況バーを実装しようとしています、その前にグリッド。 私はそれに透明な「穴」を持つPNGを持っており、進行状況バーの前のマスクとして使用されます。トランスペアレントPNGイメージを含むQLabelをスーパーインポーズ/オーバーレイする方法は?
QStackedLayout
というラベルを2つ付けて作成しようとしました.1つは単色で塗りつぶされ、もう1つはオーバーレイ用のPNGが含まれます。
QStackedLayout::StackAll
は、レイアウト内のすべてのウィジェットを表示できると思っていました。
QStackedLayout *stackedLayout = new QStackedLayout(ui->widget_progressbar);
stackedLayout->setStackingMode(QStackedLayout::StackAll);
label_fill = new QLabel();
label_fill->setFixedSize(100, 100); // just for testing
label_fill->setStyleSheet("background-color: #669966");
stackedLayout->addWidget(label_fill);
label_foreground = new QLabel();
label_foreground->setStyleSheet("border-image: url(:/img/mask.png) 0 0 0 0 stretch stretch;");
stackedLayout->addWidget(label_foreground);
上記のコードでは、緑色の四角形がマスクを覆って前景にあります。レイアウトの追加を再注文した場合、またはstackedLayout->setCurrentWidget(label_foreground);
またはlabel_foreground->raise();
を使用した場合、label_fill
はまったく表示されません。 PNGの透明な穴には、レイアウトがあるウィジェットの背景色が表示されます。これは親ウィジェットの色を変更することで確認しました。透明な穴に変更された色が見えました。
私は画像が自動的に拡大縮小されるようにスタイルシートにborder-image
を使用します。しかし、background-image
スタイルを使用するか、代わりに単純にlabel_foreground()->setPixmap(...)
を使用するだけで、同じ透明性の問題が残ります。
これを行う「正式な」方法は何ですか?
もちろん、私が本当にしなければならないのは、QPixmapを編集することですが、私はサイズ変更イベントを処理する必要があります。私自身のレイアウトマネージャを実装することなく、レイアウトでこれを解決する方法はありますか?
私はQGraphicsScene
を使用することに頼ると思いますが、基本的なレイアウトのソリューションがあるかどうかはまだ不思議です。
ルック:それは正しく画像の透明部分を通してそれ以下の他のウィジェットを示しています。あなたが持っているボーダーイメージでスタイルシートを使用すると、このプロパティは無効になっているという警告があります。私はそれが何であるかを正確にはわかりませんが、スタイルシートを使う代わりに、代わりにsetPixmapを使うかもしれません。 – goug
@goug:あいにく、質問ですでに述べたように、setPixmapでも同じことが起こります。 – vsz
私はこの質問をもう一度読みましたが、実際にスタイルシートではなくsetPixmapでこれを試したとは言えませんでした。多分あなたはそれを暗示するつもりだったかもしれませんが、確かに明確ではありません。 – goug