Qt 窗口透明化

3

我有一个顶层的无边框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个回答

0

我最多只有一个部分解决方案:

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

这会破坏click-through的行为,但只在启用Aero主题(即桌面组合)的Windows 7上有效,且仅适用于Qt 5.2及以上版本(因为winextras是在5.2中引入的)。

这对我来说是有用的。希望这对大家有所帮助。仍然希望解决这个问题的更普遍的解决方案或确认这是否是预期行为。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接