繁体   English   中英

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

[英]Is it possible to set the opacity of qt widgets?

我知道有一个函数QWidget::setWindowOpacity(qreal level)但正如文档中所写,这只适用于 Windows。

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

我想做的是一个小部件淡入的动画。我曾经用首选项对话框做过,并且它在那里工作。

那么您认为有什么方法或变通方法可以实现布局内小部件的不透明度吗? 你会怎么做?

提前致谢!

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

  • Qt4: http ://doc.qt.io/qt-4.8/qgraphicsopacityeffect.html
  • Qt5: http ://doc.qt.io/qt-5/qgraphicsopacityeffect.html
  • Qt6: https ://doc.qt.io/qt-6/qgraphicsopacityeffect.html

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

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

setWindowOpacity(qreal(value)/100);
mywidget.setStyleSheet('background-color:rgba(r, g, b, alpha);') 

为我工作

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

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM