Qt 控件设置透明和半透明方法汇总

这篇具有很好参考价值的文章主要介绍了Qt 控件设置透明和半透明方法汇总。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

遇到了好多次控件有需要设置为透明和半透明的情况,每次都是去网上搜一搜,看看别人怎么实现的,浪费了很多时间,故在这里进行一个总结,希望对自己有一个提升。

本文对透明的各种情况进行了分类:

  • 整个窗口及窗口下的控件都是半透明的状态(分类一)
  • 只有窗口是透明状态,窗口下的子控件不受影响(分类二)
  • 窗口的透明状态可调整,窗口下子控件不受影响(分类三)

看文字也是看的一脸懵逼,这里通过表格的方式再做进一步的阐述。

分类名称 窗口透明状态 窗口下子控件透明状态
分类一 透明度可调整 透明度跟随窗口透明度变化
分类二 全透明,透明度无法调整 子控件不透明
分类三 窗口的透明度可以调整 子控件不透明

下面分别分对三种方法进行分类汇总:

分类一

此种方法通过调用setWindowOpacity(qreal level)来实现,调用该接口后出整个窗口包括窗口下的子控件的透明度都会发生变化。

分类二

此种方法通多调用setAttribute(Qt::WA_TranslucentBackground)来实现。调用该属性后,该窗口会直接透明,但是该窗口下的子控件不受影响,依然是不透明的。

优点:可以快速的实现窗口的全透明,并且该接口只影响调用属性的控件本身,不影响子控件。

缺点:缺点也很明显,就是不能调整透明度,在某些场景下不太灵活

注意事项:需要注意的是在对某个控件设置该属性后,只影响控件本身,对子控件或者父控件没有影响,有点时候会很纳闷,明明自己对某个控件设置了该属性,为什么还是感觉没有变透明呢?这里其实已生效了,只是设置该属性的父控件没有设置透明属性而已,为了更好的观察效果,建议对设置该属性的控件的父控件设置一个背景色,这样就很容易的看出是否生效了。

分类三

我个人认为更多时候是使用分类三,以为这种情况下窗口的透明度可以调节,通过设置不同的背景可以实现更好的展示效果,更容易做出漂亮的界面。这里我也对这种情况进行了分类,以窗口为例:

  • 窗口的背景指定的颜色(QColor)
  • 窗口的背景是指定的图片

上面两种情况会有不同的方法来实现窗口的半透明,下面将针对每种情况一一进行说明。

窗口背景为指定的颜色(QColor)

这种情况比较简单,直接在ui文件中对窗口设置样式表即可,例如:

#customPageColor{background-color: rgb(170, 170, 255,100);}

 上面的引用中可以看到rgb中前三个分别是红、绿、蓝三种颜色,最后一个数字100表示的是透明度,取值范围为(0~255)。感兴趣的朋友可以自行实验下。

需要注意的是如果窗口为顶层窗口,即在UI Designer中没有父窗口并且该窗口是以QWidget为基类时,设置的样式表没有生效。这个手需要在类的构造函数调用setAttribute(Qt::WA_StyledBackground);属性,重新运行样式表就可以生效了。原因是QWidget并么有重新实现paintEvent函数,当然不调用这个属性,重载paintEvent函数也是可以的。感兴趣的朋友可以自行尝试,网上也有相关的教程。

窗口背景为图片

这种情况下就不能简单的通过样式表来完成窗口的透明度设置了,因为图片的样式表并不像QColor一样有透明通道,需要通过其他的方法来实现。通过实验有两种方法可以实现效果。

方法一:

  • 通过重载paintEvent函数,QPainter类有一个成员函数setOpacity,在绘制之前通过调用调用该函数,绘制时就可以根据透明设置的透明度绘制图片。参考代码如下:
    QPainter painter(this);
    painter.setOpacity(0.4);
    painter.drawPixmap(rect(),QPixmap(":/image/2.jpg"),QRect());

  • 同样是重载paintEvent函数,不过是采用不同的方法,简要的是说还是通过QPainter提供的一些方法来实现图片的绘制。这里不进行赘述,直接上代码,感觉QPatiner这个类太强大了。
    //方法二:该方法也可以实现图片背景的透明度设置,但是此种方法在实战中可能使用价值比较高
    QPixmap covert_pixmap(":/image/2.jpg");

    QPixmap pixmap(covert_pixmap.width(), covert_pixmap.height());

    pixmap.fill(Qt::transparent);

    QPainter painter(&pixmap);

    QPoint start_point(0, 0);

    QPoint end_point(0, pixmap.height());

    //QLinearGradient进行渐变色设置

    QLinearGradient linear_gradient(start_point, end_point);

    linear_gradient.setColorAt(0, QColor(255, 255, 255, 100));

    linear_gradient.setColorAt(0.5, QColor(255, 255, 255, 150));

    linear_gradient.setColorAt(1, QColor(255, 255, 255, 255));

    painter.fillRect(this->rect(), QBrush(linear_gradient));

    painter.setCompositionMode(QPainter::CompositionMode_SourceIn);

    painter.drawPixmap(0, 0, covert_pixmap);

    painter.end();



    QPainter painter2(this);

    painter2.drawPixmap(0, 0, pixmap);

效果图给大家展示一下,首先是主界面:

qt设置控件背景透明,Qt,qt

上图中的“按钮测试”按钮点后展示的是分类二的全透明效果。原图如下:qt设置控件背景透明,Qt,qt

设置透明后效果如下所示:

qt设置控件背景透明,Qt,qt

 可以看到窗口的背景已经完全透明了,仅显示了两个子控件。

继续点击主界面中的“打开colorPage”按钮,显示的窗口是以指定的颜色为背景色。效果如下所示:

qt设置控件背景透明,Qt,qt

 继续点击主界面中的“打开PicPage”按钮,效果如下所示:

qt设置控件背景透明,Qt,qt

代码资源下载地址(无需积分):https://download.csdn.net/download/iqanchao/87699074文章来源地址https://www.toymoban.com/news/detail-539479.html

到了这里,关于Qt 控件设置透明和半透明方法汇总的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • QT中怎么使用QPalette设置按钮控件背景色

    QT中怎么使用QPalette设置按钮控件背景色

    💂 个人主页:pp不会算法 v 🤟 版权: 本文由【pp不会算法 v 】原创、在CSDN首发、需要转载请联系博主 💬 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦 关于以上代码:并没有实现设置按钮控件的背景色 但是参照QT的帮助文档: 照上面这么讲确实应该可

    2024年02月11日
    浏览(30)
  • Qt 设置窗体透明

    Qt 设置窗体透明

    一、前言 在音频开发中,窗体多半为半透明、圆角窗体,如下为Qt 5.5 VS2013实现半透明方法总结。 二、半透明方法设置 1、窗体及子控件都设置为半透明 1)setWindowOpacity(0.8);//参数范围为0-1.0,通过QSlider控件做成透明度控制条   2)无边框设置 3)窗体圆角设置 2、通过图片贴图

    2024年02月11日
    浏览(9)
  • WPF 控件设置透明度的方法

    WPF 控件设置透明度的方法

    方法一:通过 Opacity 属性设置背景色透明度。范围从0-1,0表示完全透明,看不见。     通过 Opacity 属性去改变控件透明度 会影响子控件的透明度,是因为Opacity属性是在UIElement 类(以及Brush基类)中定义,所有元素都具有该属性; 界面如下图图  方法二:通过Background 属性的

    2024年02月11日
    浏览(8)
  • 如何在Qt Desginer中设置背景图片,且不覆盖其它控件

    如何在Qt Desginer中设置背景图片,且不覆盖其它控件

    正常情况,我们直接通过在样式表里设置背景图片会出现背景图片覆盖其它控件的情况,比如下面操作: 首先右击空白处,点击改变样式表。 然后选择background-image 然后点击铅笔图标 之后我们要先添加前缀,也就是我们的项目名,比如我的这个项目名为Snake,那就添加一个名

    2024年02月03日
    浏览(8)
  • PPT/PS——设置图片的背景为透明色的方法

    PPT/PS——设置图片的背景为透明色的方法

    将图片放到PPT内,点击图片,点击格式,删除背景 PS小白 扣去背景流程 PS怎么把背景色改成透明色呢?

    2024年02月07日
    浏览(10)
  • Qt 设置窗口背景

    窗口背景无非两种:背景色、背景图片。Qt中窗口背景如何设置? 一、QPalette设置背景 二、实现paintEvent,使用QPainter来绘制背景 三、使用QSS来设置背景  关于QSS的使用不想多说,一般我不用QSS设置窗口背景,也不建议使用。(注意:这里是对于窗口而言)。如果是子部件当然

    2024年02月11日
    浏览(10)
  • QT--文字输入及背景设置

    QT--文字输入及背景设置

             效果如图所示: 使用的QT版本为QT5.15.2         代码:maindow.cpp  

    2024年02月13日
    浏览(6)
  • QT qlineargradient 设置背景渐变

    QT qlineargradient 设置背景渐变

    作为一名初级开发,开发之初UI设计师给了我客户端的设计图纸,其中就有设计背景渐变 要求是从上的蓝往下渐变成白 刚开始我直接把UI写的代码考到widget的stylesheet发现根本不行,必须要使用QT的qlineargradient 所有我重写了样式表的代码如下:  效果:  渐变过程:x代表左右

    2024年01月16日
    浏览(6)
  • qt设置控件的风格样式

    设置tablewidget 设置表头样式 设置Lineedit样式 设置GroupBox样式 设置CheckBox的样式 设置PushButton的样式 设置RadioButton的样式 设置ComboBox的样式 设置Label的样式

    2024年02月14日
    浏览(7)
  • QT设置widget背景图片

    QT设置widget背景图片

    首先说方法,在给widget或者frame或者其他任何类型的控件添加背景图时,在样式表中加入如下代码,指定某个控件,设置其背景。 如果单纯改变样式表,没有指定控件的话,内部的其他控件背景也会改变。 特别提醒:类名 # 控件名,其中控件名要准确,假如你把widget的名字改

    2024年02月11日
    浏览(9)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包