一部に QML を使用して Qt/C++ アプリケーションを作成しています。ウィンドウの下では、ウィンドウ クラスのこのスニペットに見られるように、ExtendFrameIntoClientArea を使用して半透明のウィンドウを利用したいと考えています。
#ifdef Q_WS_WIN
if ( QSysInfo::windowsVersion() == QSysInfo::WV_VISTA ||
QSysInfo::windowsVersion() == QSysInfo::WV_WINDOWS7 )
{
EnableBlurBehindWidget(this, true);
ExtendFrameIntoClientArea(this);
}
#else
このコードは、1 つの例外を除いてうまく機能しています。透明なウィンドウ システムがオフになっていると、背景が黒くなり、UI の一部が透明になるため、背景も暗くなります。アプリケーションを実行しているリモート コンピューターにログインした場合も、透過ウィンドウ システムがすぐに再初期化されても、上記のコードが再度実行されるまで背景は黒のままです。これは、この画像で示されています:失敗したレンダリング (背景) と正しいレンダリング (前) の比較。
問題は、透過ウィンドウを再初期化するために接続する信号を見つけること、またはウィンドウが透過的に描画されるタイミングを検出して、それに応じて UI を描画することです。代替ソリューションも大歓迎です。