5

QLabel透明なウィンドウ (またはQFrameまたはQWidget)を描画する必要がありますが、 を使用しませんWA_TranslucentBackgroundその理由は、ウィンドウには OpenGL を介してレンダリングされた他の子ウィジェットが含まれ、そのプロパティを使用すると、ここに記載されているように、それらのウィンドウが Windows で非表示になるためです。これは Mac では正常に機能しますが、Windows では機能しないため、Windows でのみ別のソリューションが必要です。私はこれを試しました:空白を設定しますpixmap。ただし、灰色の背景で表示されます。

#include <QApplication>
#include <QLabel>
#include <QBitmap>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QLabel l;
    l.setWindowFlags(Qt::FramelessWindowHint);
    QPixmap p("");
    l.setPixmap(p);
    l.setScaledContents(true);
    l.resize(300, 500); //just to test my idea
    l.setMask(p.scaled(l.width(),l.height(),Qt::IgnoreAspectRatio,
    Qt::SmoothTransformation).mask());
    l.show();
    return a.exec();
}

Windowsでこれを実現する他の手段、つまり完全に透明なウィンドウを提案できる人はいますか? プラットフォーム - Qt 5.3.1、32 ビット。

PS - 半透明のウィンドウのように動作する必要はありません。つまり、レンダリングされたウィジェットの透明な部分を通して背景をクリックできる場合ですWA_TranslucentBackground。ここでは、透明である限り問題ありません。クリック可能である必要はありません。

4

3 に答える 3

3

私は Windows (Qt 5) を使用しており、以下を使用して半透明ウィジェットを作成します。

setWindowOpacity(0.6);
setStyleSheet("QWidget{background: #000000}")

不透明度をゼロに設定すると機能するはずです。これを Windows のフラグ「framelessWindow」と「Tool」と組み合わせて使用​​し、画面の背景を暗くします。

于 2016-01-11T06:51:25.927 に答える
1

残念ながら、これは Windows では不可能です。次のように、アルファチャンネルを使用して色付きのウィジェットの透明度を設定できますsetStyleSheet("background-color: rgba(255,0,0,50%);");。ただし、設定するまで、トップレベルのウィジェットでは機能しませんWA_TranslucentBackground。このフラグがないと、アルファチャンネルは機能せず、黒いウィンドウが表示されます。したがって、唯一の解決策は useWA_TranslucentBackgroundです。そして、Qt ドキュメントのように OpenGL ペインティングを行います。

この問題を回避するには、OpenGL ではなく Qt を使用してすべてをレンダリングするか、OpenGL をピックスマップにレンダリングし、代わりにそれをウィジェットに描画します。

于 2016-01-14T07:49:56.953 に答える