[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);//对齐方式

 

效果图:

clip_image002 clip_image004

 

附件:

源码MessageDialog.zip

下载地址:

http://pan.baidu.com/share/link?shareid=135850&uk=3238766853

posted @ 2012-07-19 22:16  喵星人の耳朵  阅读(1517)  评论(0编辑  收藏  举报