Можно ли установить непрозрачность виджетов qt?

Я знаю, что существует функция QWidget::setWindowOpacity(qreal level) но, как написано в документации, это работает только для Windows.

есть ли способ сделать виджеты, которые лежат внутри макетов непрозрачными?

то, что я пытаюсь сделать, это анимация, в которой виджеты исчезают. Я однажды сделал это с диалогом настроек, и там он работал.

Итак, как вы думаете, есть способ или обходной путь для достижения непрозрачности виджетов внутри макетов? Как бы ты поступил? это?

спасибо заранее!

4 ответов


просто используйте QGraphicsOpacityEffect для достижения этого эффекта.


для виджетов внутри mainwidow кажется setAutoFillBackground(False) по умолчанию.

чтобы он исчез в fadeout u нужно использовать QGraphicsOpacityEffect вместе с setAutoFillBackground(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)

SetWindowOpacity работает для меня в Linux. Я использовал такой код для изменения непрозрачности окна, (значение от 0 до 100):

setWindowOpacity(qreal(value)/100);

в 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