c++ - Qt - 在不使用 WA_TranslucentBackground 的情况下在 Windows 中绘制一个完全透明的窗口

标签 c++ qt transparent qwidget qframe

我需要绘制透明窗口(QLabelQFrameQWidget),但不使用 WA_TranslucentBackground .原因是窗口将包含通过 OpenGL 呈现的其他子窗口小部件,并且使用该属性会使这些窗口在 Windows 上不可见,如文档中所述 here .虽然这在 Mac 上工作正常,但我只需要在 Windows 上使用不同的解决方案,因为它在那里不起作用。我试过这个:设置一个空白的 pixmap。但它仍然显示为灰色背景:

#include <QApplication>
#include <QLabel>
#include <QBitmap>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QLabel l;
    l.setWindowFlags(Qt::FramelessWindowHint);
    QPixmap p("");
    l.setPixmap(p);
    l.setScaledContents(true);
    l.resize(300, 500); //just to test my idea
    l.setMask(p.scaled(l.width(),l.height(),Qt::IgnoreAspectRatio,
    Qt::SmoothTransformation).mask());
    l.show();
    return a.exec();
}

谁能建议在 Windows 上实现此目的的任何其他方法,即完全透明的窗口?平台 - Qt 5.3.1,32 位。

P.S - 它不需要表现得像半透明窗口,即可以通过通过 WA_TranslucentBackground 呈现的小部件的透明部分点击背景。这里只要是透明的就可以,不需要'through'点击。

最佳答案

我在 Windows (Qt 5) 上使用以下命令创建半透明小部件:

setWindowOpacity(0.6);
setStyleSheet("QWidget{background: #000000}")

如果将不透明度设置为零,它应该可以工作。 我将它与 Windows 标志“framelessWindow”和“Tool”一起使用来使屏幕背景变暗。

关于c++ - Qt - 在不使用 WA_TranslucentBackground 的情况下在 Windows 中绘制一个完全透明的窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34714337/

相关文章:

overlay - Xwindow 父窗口中的透明窗口

c++ - WIX C++ 自定义操作

c++ - 单张图像的相机校准?它似乎有效,但我错过了什么吗?

c++ - 来自具有相同图像的相机的 OpenCV 匹配图像不会产生 100% 匹配

qt - QSplitter 有一个固定大小的小部件和一个可变大小的小部件?

c++ - 在 Webview Blackberry 10 Cascades Beta 3 SDK Dev Alpha Simulator 中获取不正确的权限屏幕

Android:AppBarLayout渐变背景

c++ - Qt JSON – 从子项查询

c++ - 使用 QtUdpSocket 的简单通信 c/s 应用程序

android - 在 Canvas 上绘制透明文本