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

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

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

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

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

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


person Exa    schedule 21.12.2010    source источник
comment
Если у вас нет фона под виджетом, возможно, вы можете изменить цвет виджета, начиная с цвета фона.   -  person graphite    schedule 21.12.2010
comment
Существует аналогичный вопрос Анимация прозрачности. . с примером кода.   -  person Trilarion    schedule 05.05.2014


Ответы (5)



Что ж, виджеты внутри mainwidow по умолчанию имеют setAutoFillBackground(False).

чтобы он постепенно исчезал, вам нужно использовать 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)
person Ja8zyjits    schedule 21.03.2015
comment
Установка setAutoFillBackground для дочернего элемента центрального виджета помогла мне: эффект непрозрачности теперь работает для виджета. Любая идея, почему требуется настройка? - person alisianoi; 06.09.2018

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

setWindowOpacity(qreal(value)/100);
person Pawel Zubrycki    schedule 21.12.2010
comment
Это работает для окон, но не для виджетов, которые являются частью макета и т. д. По крайней мере, для меня я использую Microsoft Windows. - person Exa; 21.12.2010
comment
Ах, я неправильно понял. Я хотя вы имеете в виду MS Windows xD - person Pawel Zubrycki; 22.12.2010

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

работает на меня

person MACRO DAT    schedule 17.03.2020
comment
Пожалуйста, посмотрите на форматирование кода в вашем ответе, чтобы его было легче читать. - person dspencer; 17.03.2020

В 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();
}

введите здесь описание изображения

person Petr Tripolsky    schedule 01.01.2018