[QT编程]QT实现的一个渐隐渐显窗体
这次做了一个渐隐渐显的小窗体,窗体用的是之前讲的透明不规则窗体,普通的窗体也可以实现渐隐渐显。
原理:窗体启用了一个QTimer来控制其透明度实现渐隐渐显。
关键代码:
该窗体类中定义了几个变量:
double opacityInc;//透明度增长值 double maxOpacity;//最大透明度 bool isDisplay;//是否已经显示 int displayTime;//已经显示了多久 int displayInterval;//窗口显示时间 |
构造时给定一些初始值:
opacityInc = 0.08; maxOpacity = 0.8; timerInterval = 50; displayInterval = 4000; isDisplay = false; displayTime = 0; |
timer的timeout代码:
void MessageDialog::timeout() { if(this->isVisible()) { if(isDisplay) { if(this->windowOpacity() < maxOpacity) { this->setWindowOpacity(this->windowOpacity() + opacityInc); } else { displayTime += timerInterval; if (displayTime >= displayInterval) { displayTime = 0; isDisplay = false; } } } else { if(this->windowOpacity() > 0.0) { this->setWindowOpacity(this->windowOpacity() - opacityInc); } else { //this->hide();//这里隐藏之后,在linux下会导致第二次显示的时候位置在左上角 qApp->exit();//为了让示例程序能够正常退出,这里使用qApp->exit() } } } } |
这里顺带说一下让QLabel自动换行的代码:
lbl->setWordWrap(true);//自动换行 lbl->setAlignment(Qt::AlignHCenter);//对齐方式 |
效果图:
附件:
源码MessageDialog.zip
下载地址:
http://pan.baidu.com/share/link?shareid=135850&uk=3238766853