zoukankan      html  css  js  c++  java
  • 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();
        }
    }
    

  • 相关阅读:
    ASP的生成指定格式的GUID
    Principle
    Email icon generator
    Google 's Gmail
    防火墙
    注释
    对敏捷开发方法的一些疑问
    Faq about multimedia
    BSTR、char*和CString转换
    dshow配置环境vc6
  • 原文地址:https://www.cnblogs.com/hanzhaoxin/p/2783222.html
Copyright © 2011-2022 走看看