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

У меня есть верхний уровень Безрамное QMainWindow с полупрозрачностью. У меня есть нежелательный эффект сквозного перехода (к основному окну) в прозрачных частях окна.

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow *window = new MainWindow;
    window->setWindowFlags(window->windowFlags() | Qt::FramelessWindowHint);
    window->setAttribute(Qt::WA_TranslucentBackground);
    QLabel *label = new QLabel("Hello World!");
//  window->setStyleSheet("background-color: rgba(0,0,0,1%)");
    window->setCentralWidget(label);
    window->show();

    return a.exec();
}

Это ожидаемое поведение и, если нет, есть ли способ обойти это.

1 ответ

У меня есть то, что в лучшем случае является частичным решением этой проблемы:

#include <QtWinExtras>
...
QtWin::extendFrameIntoClientArea(window, -1, -1, -1, -1);

Это ломает click-through поведение, но работает только в Windows 7, когда включена Aero Theme (то есть композиция на рабочем столе) и только для Qt 5.2 и более поздних версий (как winextras была представлена ​​в 5.2).

Это работает для меня. Надеюсь, что это полезно в целом. Все еще хотел бы более общее решение проблемы или возможно подтверждение, что это - ожидаемое поведение.

Другие вопросы по тегам