Я создаю приложение Qt/C++, используя QML для некоторых частей. Под окнами я хотел бы использовать полупрозрачное окно, используя ExtendFrameIntoClientArea, как показано в этом фрагменте из моего класса окна.
#ifdef Q_WS_WIN
if ( QSysInfo::windowsVersion() == QSysInfo::WV_VISTA ||
QSysInfo::windowsVersion() == QSysInfo::WV_WINDOWS7 )
{
EnableBlurBehindWidget(this, true);
ExtendFrameIntoClientArea(this);
}
#else
Код работает хорошо, за одним исключением. Если прозрачная оконная система отключена, фон становится черным, а поскольку часть моего пользовательского интерфейса прозрачна, он также становится темным. То же самое происходит при входе в систему на удаленном компьютере, на котором запущено приложение, даже если прозрачная оконная система повторно инициализируется немедленно, фон остается черным, пока приведенный выше код не будет выполнен снова. Это показано на этом изображении: Сравнение неудачного рендеринга (на заднем плане) и правильного (на переднем плане).< /а>
Проблема заключается в том, чтобы найти сигнал для подключения к повторной инициализации прозрачного окна или, что еще лучше, определить, когда окна отрисовываются прозрачными, и соответствующим образом отрисовать пользовательский интерфейс. Также приветствуются любые альтернативные решения.