Ich erstelle eine Qt/C++ - Anwendung mit QML für einige Teile. Unter Windows möchte ich die transluzente Fensterung mit ExtendFrameIntoClientArea nutzen, wie in diesem Ausschnitt meiner Fensterklasse zu sehen ist.QT Transluzentes Fenster und Remote-Desktop
#ifdef Q_WS_WIN
if (QSysInfo::windowsVersion() == QSysInfo::WV_VISTA ||
QSysInfo::windowsVersion() == QSysInfo::WV_WINDOWS7)
{
EnableBlurBehindWidget(this, true);
ExtendFrameIntoClientArea(this);
}
#else
Der Code funktioniert gut mit einer Ausnahme. Wenn das transparente Fenstersystem ausgeschaltet wird, wird der Hintergrund schwarz und als Teil meiner UI transparent wird es auch dunkel. Dasselbe passiert, wenn man sich bei einem entfernten Computer anmeldet, der die Anwendung ausführt, selbst wenn das transparente Fenstersystem sofort neu initialisiert wird, bleibt der Hintergrund schwarz, bis der obige Code erneut ausgeführt wird. Dies wird in diesem Bild gezeigt: Comparison of failed rendering (in background) and correct (in front).
Das Problem besteht darin, ein Signal zum Verbinden zu finden, um das transparente Fenster neu zu initialisieren, oder noch besser zu erkennen, wenn Fenster transparent gezeichnet werden und die Benutzeroberfläche entsprechend zu zeichnen. Alternative Lösungen sind ebenfalls willkommen.