Qt设置窗体透明

    xiaoxiao2022-06-26  218

    这几天研究了下Qt关于窗体透明的方法,不同的方法有着不同的效果,今天在此总结一下。界面结构如下:

    全透明

    setWindowOpacity(double value)。该函数用来设置窗体透明度,有效范围从1.0到0.0,并且会影响子控件。默认情况下,此属性的值是1.0(不透明)。

    //全透明 setWindowOpacity(0.7);

    子控件透明

    使用Qt样式表,background:rgba(r,g,b,opacity),rgb是颜色值,opacity是设置为半透明的透明度,有效范围从1.0到0.0。使用样式表设置一张背景图,widget和label的透明度,关于样式表可以在Qt Designer进行设置。(设置透明度要指定对象,避免影响其他控件)

    //子控件透明 this->setStyleSheet("#centralWidget{border-image:url(://timg.jpg);}" "#label{background:rgba(255,255,0,0.4);}" "#widget{background:rgba(255,0,0,0.3);}");

    父窗口透明

    情况一:背景无图片。设置属性Qt::WA_TranslucentBackground将MainWindow变为全透明,在windows上这个属性需配合Qt::FramelessWindowHint使用。然后设置centralWidget样式中的opacity调节父窗口的透明度并设置子控件的不透明。

    this->setWindowFlags(Qt::FramelessWindowHint);//需要去掉标题栏 this->setAttribute(Qt::WA_TranslucentBackground); this->setStyleSheet("#centralWidget{background:rgba(0,255,255,0.4);}" "#label{background:rgba(255,255,0,1);}" "#widget{background:rgba(0,255,255,1);}");

    情况二:背景有图片。仍然使用属性Qt::WA_TranslucentBackground将MainWindow变为全透明。然后在paintevent中将图片绘制在窗体上,并设置透明度。

    void MainWindow::paintEvent(QPaintEvent *event) { QPainter painter(this); QPixmap pix("://timg.jpg"); QPixmap scalePix = pix.scaled(this->width(), this->height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation); painter.setOpacity(0.4); painter.drawPixmap(0, 0, scalePix); }

    注:若设置背景属性失败,可尝试设置该属性解决,setAttribute(Qt::WA_StyledBackground);。


    最新回复(0)