先上图,背景黑色半透明,控件不透明
开始使用的QPalette
/*QPalette pal = this->palette();
pal.setBrush(QPalette::Background, QColor(0,0,0,100));
this->setPalette(pal);
this->setAutoFillBackground(true);*/
但是不生效,即便设置的颜色,在设置透明度是0的话,背景也是黑色的,并不是我们想要的
而setWindowOpacity(0.5)这个函数是窗口所有的透明度,包括子控件。这通常不是我们想要的效果,当然如果你的窗口没有什么可显示的东西的话,可以使用这个,很方便。
进入正题:自己绘制三行代码解决
首先设置this->setAttribute(Qt::WA_TranslucentBackground, true);//关键
然后重载virtual paintEvent(QPaintEvent *event)函数
QPainter painter(this);
painter.fillRect(this->rect(), QColor(0, 0, 0, 180));//180即是透明度
到此完成。很简单,你可以为所欲为了。