Можно ли установить прозрачность виджетов qt? - PullRequest
8 голосов
/ 21 декабря 2010

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

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

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

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

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

Ответы [ 4 ]

8 голосов
/ 12 января 2011

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

4 голосов
/ 21 марта 2015

Хорошо, для виджетов внутри 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)
2 голосов
/ 21 декабря 2010

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

setWindowOpacity(qreal(value)/100);
0 голосов
/ 01 января 2018

В 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

...