LINUX.ORG.RU

Прозрачность окна в Qt

 , ,


0

1

Здравствуйте. Хочу для панели сделать возможность использовать прозрачный фон. Делаю так:

...
this->setObjectName("panel");
...
this->setAttribute(Qt::WA_TranslucentBackground);
this->setAttribute(Qt::WA_NoSystemBackground);
this->setAttribute(Qt::WA_TransparentForMouseEvents);
...
this->setPalette(Qt::transparent);
this->setAutoFillBackground(false);
this->setAttribute(Qt::WA_OpaquePaintEvent);
...

в QSS добавил:

QWidget#panel {
    background-color: transparent;
}

В итоге получается окно с черным фоном. Методом исключения выяснил, что виноват в этом вызов this->winId(); Когда закомментировал, окно стало с прозрачным фоном, но мне нужно знать WId окна, а другого способа его получить, я не нашёл. Глянул в qwidget.cpp. Единственное, что показалось странным, включение аттрибута Qt::WA_NativeWindow. Попробовал перед установкой прозрачного фона его отключить - не помогло. Подскажите, пожалуйста, почему после получения WId окна пропадает прозрачность, и что делать?