سؤال

I know that there is a function QWidget::setWindowOpacity(qreal level) but as written in the documentation this does only work for windows.

Is there a way to make widgets that are lying inside layouts opaque too?

What I'm trying to do is an animation where widgets are fading in. I once did that with a preferences-dialog and there it worked.

So do you think there is a way or a work-around to achieve opacity for widgets inside layouts? How would you do that?

Thanks in advance!

هل كانت مفيدة؟

المحلول

Just use QGraphicsOpacityEffect in order to achieve this effect.

نصائح أخرى

Well for widgets inside mainwidow appear to have setAutoFillBackground(False) by default.

to make it fade in fadeout u need to to use QGraphicsOpacityEffect along with setAutoFillBackground(True)

a small example: write inside the widget which is called inside the mainwindow

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

SetWindowOpacity works for me in Linux. I used code like this to change window opacity, (value is from 0 to 100):

setWindowOpacity(qreal(value)/100);

In Qt5 you can use css to make widgets transparent

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top