QWidget背景透明

问题描述 投票:0回答:4

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

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

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

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

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

c++ qwidget qt5.6
4个回答
1
投票

您的颜色中包含太多字符。变化:

background-color: #ffeeeeee;

至:

background-color: #eeeeee;

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

background-color: rgba(...);

1
投票

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

    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 中的错误。


0
投票

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

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

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

0
投票

尽管这个问题很老了,但我仍然在遇到同样的问题时偶然发现了这个线程,并且我对“setAutoFillBackground(true)”方法不走运。 有时,您只需要一个独特的、不透明的背景来诊断 QWidget 的大小和放置问题。对我来说最有效的是覆盖

virtual void paintEvent(QPaintEvent*); 
并按如下方式实现它:

void MyWidget::paintEvent(QPaintEvent* e)
{
  QPainter p(this);
  p.fillRect(rect(), palette().background());
  QWidget::paintEvent(e);
}

palette().background()
替换为例如
QBrush(QColor(255, 255, 0))
用于黄色背景。

© www.soinside.com 2019 - 2024. All rights reserved.