Fork me on GitHub

Qt之对话框设计——淡入淡出效果

实例化一个QPainter类的窗体对象。首先设置该窗体显示的最初透明度为255,即不透明;启动定时器后,以一定的周期重画该窗体并使窗体的透明度递减,直至透明度为0,停止定时器,关闭窗体。


fadewidget.h

#ifndef FADEWIDGET_H
#define FADEWIDGET_H

#include <QWidget>

class QColor;
class QTimer;

class FaderWidget : public QWidget
{
    Q_OBJECT

public:
    FaderWidget(QWidget *parent);
    
    void start();
    
protected:
    void paintEvent(QPaintEvent *event);
    
private:

	QColor startColor;
    int currentAlpha;
    int fadeTimes;
	QTimer *timer;
};

#endif  // FADER_H

fadewidget.cpp

#include "fadewidget.h"
#include <QtGui>

FaderWidget::FaderWidget(QWidget *parent)
        : QWidget(parent)
{
    if (parent)
        startColor = parent->palette().window().color();
    else
        startColor = Qt::white;
    
    currentAlpha = 0;
    fadeTimes = 1000;
    
    timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()),this, SLOT(update()));
    
    setAttribute(Qt::WA_DeleteOnClose);
    resize(parent->size());
}


void FaderWidget::start()
{
    currentAlpha = 255;
    timer->start(100);
    show();
}

void FaderWidget::paintEvent(QPaintEvent * /* event */)
{
    QPainter painter(this);
    QColor currentColor = startColor;
    currentColor.setAlpha(currentAlpha);
    painter.fillRect(rect(), currentColor);
    
    currentAlpha -= 255 * timer->interval() / fadeTimes;
    if (currentAlpha <= 0) 
    {
        timer->stop();
        close();
    }
}

posted @ 2012-11-22 20:17  韩兆新  阅读(3997)  评论(0编辑  收藏  举报