Qt :非window子窗体的透明度设置
2011-12-29 08:54
204 查看
✿问题的由来
心血来潮,想利用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. }
✿解决方案
QGraphicsOpacityEffect
1. // in the constructor 2. opacityEffect = new QGraphicsOpacityEffect; 3. ui->widget->setGraphicsEffect(opacityEffect); 4. ... 5. // in changeOpacity() 6. opacityEffect->setOpacity(opacity[opalevel]);
✿效果图
相关文章推荐
- Qt :非window子窗体的透明度设置
- Qt :非window子窗体的透明度设置 .
- Qt :非window子窗体的透明度设置
- Qt :非window子窗体的透明度设置
- Qt :非window子窗体的透明度设置
- Qt 中设置窗体透明度的几种方法
- Qt 中设置窗体透明度的几种方法
- Qt 中设置窗体透明度的几种方法
- Qt设置窗体的透明度: setWindowOpacity()
- Qt 中设置窗体透明度的几种方法
- Qt设置窗体的透明度: setWindowOpacity
- QT 窗体控件的透明度设置(三种方法)
- Qt 中设置窗体透明度的几种方法
- Qt 子窗体透明度设置
- Qt 中设置窗体透明度的几种方法
- 对无边框的QT窗体设置点击任务栏按钮最小化和还原事件
- QT窗体背景色设置
- C#编写简单的调色板及设置窗体的透明度
- android 设置透明度 标题栏 窗体透明
- Qt设置窗体大小不可变/edit只能输入数字