是否可以设置qt小部件的不透明度?

问题描述 投票:8回答:4

我知道有一个函数QWidget::setWindowOpacity(qreal level)但是在文档中写的这只适用于windows。

有没有办法让布局内部的小部件也不透明?

我正在尝试做的是一个动画,其中小部件正在逐渐消失。我曾经使用偏好对话框执行此操作。

那么你认为有一种方法或解决办法来实现布局内的小部件的不透明度吗?你会怎么做?

提前致谢!

c++ qt opacity qwidget
4个回答
8
投票

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


4
投票

好吧,对于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)

2
投票

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

setWindowOpacity(qreal(value)/100);

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

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.