实例化一个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();
- }
- }