12

我知道有一个功能QWidget::setWindowOpacity(qreal level),但正如文档中所写,这仅适用于 Windows。

有没有办法使位于布局内的小部件也变得不透明?

我想要做的是一个小部件淡入的动画。我曾经用首选项对话框做到这一点,它在那里工作。

那么您是否认为有一种方法或解决方法可以实现布局内小部件的不透明度?你会怎么做?

提前致谢!

4

5 回答 5

12

只需使用 QGraphicsOpacityEffect 即可实现此效果。

于 2011-01-12T14:46:10.277 回答
9

默认情况下,mainwidow 中的小部件似乎有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)
于 2015-03-21T07:46:12.440 回答
3

SetWindowOpacity在 Linux 中为我工作。我使用这样的代码来更改窗口不透明度,(值从 0 到 100):

setWindowOpacity(qreal(value)/100);
于 2010-12-21T14:22:39.883 回答
1
mywidget.setStyleSheet('background-color:rgba(r, g, b, alpha);') 

为我工作

于 2020-03-17T04:03:17.220 回答
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();
}

在此处输入图像描述

于 2018-01-01T18:51:14.080 回答