QWidget 背景透明

Posted

技术标签:

【中文标题】QWidget 背景透明【英文标题】:QWidget background transparent 【发布时间】:2016-07-13 11:03:23 【问题描述】:

我在主窗口中有一个小部件,该小部件具有以下样式:

    background-color:#ffeeeeee;width:100%;height:100%;

它设置为小部件布局并控制自动大小以填充小部件的几何形状,但小部件的背景始终是透明的。我该怎么做才能使它不透明?

这是使用在 RedHat Linux 7.2 上运行的 Qt5.6

注意:#ffeeeeee 语法特定于 Qt,其中第一个节点是 alpha,然后是红色、绿色和蓝色八位字节。

【问题讨论】:

你试过setAutoFillBackground(true)吗?我认为默认情况下它是错误的,所以在调用paintEvent 成员之前不会绘制背景。 是的,没有区别,我还添加了更新调用,但它仍然是透明的。 background-color: gray;的时候是不是不透明? 不管样式表设置如何,背景总是透明的。 请写下你是如何设置样式的。 【参考方案1】:

你的颜色中的字符太多了。变化:

background-color: #ffeeeeee;

到:

background-color: #eeeeee;

如果你想使用透明度,你必须明确:

background-color: rgba(...);

【讨论】:

不,我的帖子是正确的...在 Qt 中,样式表的颜色格式如下,第一个节点是 alpha,然后是红色、绿色、蓝色。在我的示例中,#ff 是完全不透明的。 抱歉没用。【参考方案2】:

背景色存在并设置为以下任意一种:

    background-color:white;width:100%;height:100%;

    background-color:#ffffff;width:100%;height:100%;

或我的原件:

    background-color:#ffeeeeee;width:100%;height:100%;

属性 autoFillBackground 设置为 false 并且小部件的背景在运行时是透明的。

但是删除任何背景颜色样式并保持样式不变:

    width:100%;height:100%

属性 autoFillBackground 设置为 true 并且小部件是不透明的。

据我所见,样式没有错误,我相信这可能是 Qt 中的错误。

【讨论】:

您是说如果在样式中设置了background-color 属性,则对setAutoFillBackground(true) 的调用会失败? 如果我为背景颜色添加样式,它会自动将 autofillbackground 节点的值更改为 false。 对不起,但这不是我要问的。我的问题是...如果我将样式设置为设置background-color 属性的样式,那么后续调用setAutoFillBackground(true) 是否不会将autoFillBackground 设置为true?这是我最初评论中的建议。 我已经尝试过了,但它也不起作用,当设置为 true 时,它​​不会使用样式设置的颜色,这就是我在指定颜色时得到的颜色样式它会自动禁用 XML 中的设置。【参考方案3】:

您是否尝试过使用 QWidget::setWindowOpacity(1),其中 1 = 不透明,0 = 透明。

也可以试试 QGraphicsOpacityEffect。以下是为按钮设置 50% 不透明度的代码,但它也可以扩展到小部件。

ui->setupUi(this);
QGraphicsOpacityEffect * effect = new QGraphicsOpacityEffect(ui->pushButton);
effect->setOpacity(0.5); 
ui->pushButton->setGraphicsEffect(effect);

【讨论】:

是的,XML中的设置是1。

以上是关于QWidget 背景透明的主要内容,如果未能解决你的问题,请参考以下文章

QWidget透明背景(但不是孩子)

如何在 pyside QWidget 中拥有透明背景,但保持其子项不透明

Qt主窗口透明背景

具有完全透明背景的 qt 小部件

Qt窗口透明

无法在不中断堆叠顺序的情况下使 QQuickWidget 背景透明