Sex*_*ast 5 c++ qt transparent qwidget qframe
我需要绘制透明窗口(QLabel或QFrame或QWidget),但不使用WA_TranslucentBackground. 原因是窗口将包含通过 OpenGL 呈现的其他子窗口小部件,并且使用该属性使这些窗口在 Windows 上不可见,如此处所述。这在 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();
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以建议在 Windows 上实现这一目标的任何其他方法,即完全透明的窗口?平台 - Qt 5.3.1,32 位。
PS - 它不需要表现得像半透明窗口,即可以通过渲染的小部件的透明部分单击背景WA_TranslucentBackground。这里只要它是透明的就可以了,它不需要“通过”点击。
不幸的是,这在 Windows 上是不可能的。您可以使用带有 alpha 通道的颜色设置小部件的透明度,如下所示:setStyleSheet("background-color: rgba(255,0,0,50%);");。但在您设置之前,whis 不适用于顶级小部件WA_TranslucentBackground。如果没有这个标志,alpha 通道就不起作用,你会看到黑色的窗口。所以唯一的解决办法就是使用WA_TranslucentBackground. 然后像 Qt 文档所说的那样进行 OpenGL 绘画:
要解决此问题,您可以只使用 Qt 来渲染所有内容而不是 OpenGL,或者您可以将 OpenGL 渲染为像素图并将其绘制到您的小部件上。