能否设置qt小部件的不透明度?

13

我知道有一个函数QWidget::setWindowOpacity(qreal level),但是根据文档所述,这仅适用于窗口。

是否有办法使位于布局内的小部件也不透明?

我正在尝试制作一个动画,其中小部件正在淡入。 我曾经在偏好对话框中使用过这种方法,那里它起作用了。

因此,您认为有没有办法或解决方法可以使布局内的小部件不透明?您将如何做到这一点?

提前谢谢!


如果你对小部件没有背景了解,也许你可以从背景色开始改变小部件的颜色。 - graphite
这里有一个类似的问题Animate transparency..,其中包含了代码示例。 - Trilarion
5个回答


11

在主窗口中,小部件似乎默认使用setAutoFillBackground(False)

要实现淡入淡出效果,必须使用QGraphicsOpacityEffectsetAutoFillBackground(True)

以下是一个小例子:在被称为主窗口内的小部件中编写代码。

op=QGraphicsOpacityEffect(self)
op.setOpacity(1.00) #0 to 1 will cause the fade effect to kick in
self.setGraphicsEffect(op)
self.setAutoFillBackground(True)

setAutoFillBackground设置在中央窗口的子控件上对我起了作用:现在小部件的不透明效果可以正常工作了。有什么想法为什么需要设置它? - alisianoi

4

SetWindowOpacity在Linux中可以使用。我使用了类似下面的代码来改变窗口透明度(值从0到100):

setWindowOpacity(qreal(value)/100);

这适用于Windows,但不适用于作为布局一部分的小部件等。至少对我来说,我正在使用Microsoft Windows。 - Exa
4
啊,我误解了。我以为你指的是微软Windows系统xD。 - Pawel Zubrycki

3
mywidget.setStyleSheet('background-color:rgba(r, g, b, alpha);') 

适用于我。

请注意格式化您的代码以使其更易于阅读。 - dspencer

0
在Qt5中,你可以使用CSS让小部件透明。
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QDialog dialog;
    dialog.setStyleSheet(QLatin1String("#LolButton{color: transparent; background-color: transparent;}"));
    QPushButton button(&dialog);
    button.setText("Button");
    button.setObjectName(QStringLiteral("LolButton"));
    QObject::connect(&button,&QPushButton::clicked,[](){
        QMessageBox msg;
        msg.setText("LolButton omg");
        msg.exec();
    });
    dialog.show();
    return a.exec();
}

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接