• Qt :非window子窗体的透明度设置


    ✿问题的由来

     
             心血来潮,想利用QTimer 配合 setWindowOpacity()方法来实现一个窗体淡入的效果。
     

    ✿实验代码

     
     粗糙的实验代码:
    1. void Widget::on_pushButton_clicked()  
    2. {  
    3.    QTimer *timerOpacity = new QTimer(this);  
    4.    connect(timerOpacity,SIGNAL(timeout()),this,SLOT(changeOpacity()));  
    5.    timerOpacity->start(100);  
    6. }  
    7.   
    8. void Widget::changeOpacity()  
    9. {  
    10.     if (opalevel > 8) return;  
    11.     double opacity[9] =  {0.9,0.8,0.7,0.6,0.5,0.4,0.3,0.2,0.1};  
    12.     ui->stackedWidget->setWindowOpacity(opacity[opalevel]);  
    13.     ui->widget->setWindowOpacity(opacity[opalevel]);  
    14.     this->setWindowOpacity(opacity[opalevel]);  
    15.   
    16.     qDebug()<<"opalevel = "<< opalevel <<" ui->widget opacity:"<<ui->widget->windowOpacity();  
    17.     qDebug()<<"opalevel = "<< opalevel <<" ui->stackedWidget opacity:"<<ui->stackedWidget->windowOpacity();  
    18.     qDebug()<<"opalevel = "<< opalevel <<" ui opacity : "<< this->windowOpacity()<<endl;  
    19. }  

    ✿实验失败

     
    现象是主窗体的有淡入的效果,即透明度有变化,但是子窗体没有,opacity始终为1 。
    Log :
    opalevel =  0  ui->widget opacity: 1 
    opalevel =  0  ui->stackedWidget opacity: 1 
    opalevel =  0  ui opacity  0.898039 
    ......

    opalevel =  8  ui->widget opacity: 1 
    opalevel =  8  ui->stackedWidget opacity: 1 
    opalevel =  8  ui opacity  0.0980392 

    ✿失败原因

     
    1. void QWidget::setWindowOpacity(qreal opacity)  
    2. {  
    3.     Q_D(QWidget);  
    4.     if (!isWindow())  
    5.         return;  
    6. //...  
    7. }  

    ✿解决方案

     
     
            
    1. // in the constructor  
    2. opacityEffect = new QGraphicsOpacityEffect;  
    3. ui->widget->setGraphicsEffect(opacityEffect);  
    4. ...  
    5. // in changeOpacity()  
    6. opacityEffect->setOpacity(opacity[opalevel]);  

    ✿效果图

       
    http://blog.csdn.net/yiyaaixuexi/article/details/6780551
  • 相关阅读:
    ReentrantLock类详解
    Linux中 docker安装
    canvas画图练习教程
    Axure 9 使用笔记
    设计模式9—工厂模式【创建型】
    Docker 快速部署 MySQL
    Laravel Sanctum SPA cookie&session 验证实践
    地图地区生成随机点
    Laravel Class 'DoctrineDBALDriverPDOMySqlDriver' not found
    LightHouse 自定义参数指令 (Argument Directives)
  • 原文地址:https://www.cnblogs.com/findumars/p/4993570.html
Copyright © 2020-2023  润新知