Qt工作笔记-图像模糊处理,以及动画旋转
发布日期:2021-06-30 10:56:49 浏览次数:2 分类:技术文章

本文共 4305 字,大约阅读时间需要 14 分钟。

gif图很大,不好上传,就上传普通图片:

运行截图如下:

 

源码如下:

blureffect.h

#ifndef BLUREFFECT_H#define BLUREFFECT_H#include 
QT_BEGIN_NAMESPACEclass QGraphicsItem;QT_END_NAMESPACEclass BlurEffect : public QGraphicsBlurEffect{public: BlurEffect(QGraphicsItem *item); void setBaseLine(const qreal y); void draw(QPainter *painter)Q_DECL_OVERRIDE;private: void adjustForItem(); qreal m_baseLine; QGraphicsItem *m_item;};#endif // BLUREFFECT_H

mygraphicsview.h

#ifndef MYGRAPHICSVIEW_H#define MYGRAPHICSVIEW_H#include 
class MyGraphicsView : public QGraphicsView{ Q_OBJECTpublic: explicit MyGraphicsView(QWidget *parent = 0);protected: void keyPressEvent(QKeyEvent *event)Q_DECL_OVERRIDE;signals: void sendDelta(int delta);};#endif // MYGRAPHICSVIEW_H

widget.h

#ifndef WIDGET_H#define WIDGET_H#include 
QT_BEGIN_NAMESPACEclass QGraphicsScene;class QGraphicsItem;class QPropertyAnimation;QT_END_NAMESPACEnamespace Ui {class Widget;}class Widget : public QWidget{ Q_OBJECT Q_PROPERTY(qreal index READ index WRITE setIndex)public: explicit Widget(QWidget *parent = 0); ~Widget(); qreal index()const; void setIndex(const qreal index);protected slots: void animationRun(int delta);private: Ui::Widget *ui; QGraphicsScene *m_scene; QList
m_icons; QPropertyAnimation *m_animation; qreal m_index;};#endif // WIDGET_H

blureffect.cpp

#include "blureffect.h"#include 
#include
BlurEffect::BlurEffect(QGraphicsItem *item) :QGraphicsBlurEffect() ,m_baseLine(200),m_item(item){}void BlurEffect::setBaseLine(const qreal y){ m_baseLine=y;}void BlurEffect::draw(QPainter *painter){ adjustForItem(); QGraphicsBlurEffect::draw(painter);}void BlurEffect::adjustForItem(){ qreal y=m_baseLine-m_item->pos().y(); qreal radius=qBound(qreal(0.0),y/32,qreal(16.0)); setBlurRadius(radius);}

main.cpp

#include "widget.h"#include 
int main(int argc, char *argv[]){ QApplication a(argc, argv); Widget w; w.show(); return a.exec();}

mygraphicsview.cpp

#include "mygraphicsview.h"#include 
#include
MyGraphicsView::MyGraphicsView(QWidget *parent) : QGraphicsView(parent){}void MyGraphicsView::keyPressEvent(QKeyEvent *event){ int delta=0; switch(event->key()){ case Qt::Key_Left: delta=-1; break; case Qt::Key_Right: delta=1; break; default: break; } emit sendDelta(delta);}

wiget.cpp

#include "widget.h"#include "ui_widget.h"#include "blureffect.h"#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#ifndef M_PI#define M_PI 3.14159265358979323846#endifWidget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget){ ui->setupUi(this); ui->graphicsView->setStyleSheet("background: transparent;border:0px"); ui->graphicsView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); ui->graphicsView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); ui->graphicsView->setRenderHints(ui->graphicsView->renderHints()|QPainter::Antialiasing|QPainter::SmoothPixmapTransform); setWindowFlags(Qt::Window|Qt::FramelessWindowHint); setAttribute(Qt::WA_TranslucentBackground); setWindowState(Qt::WindowMaximized); m_index=0.0; m_scene=new QGraphicsScene; ui->graphicsView->setScene(m_scene); QStringList fileList; for(int i=0;i<10;i++){ fileList<<":/img/"+QString::number(i+1)+".png"; } for(int i=0;i
addPixmap(pixmap); icon->setZValue(1); icon->setGraphicsEffect(new BlurEffect(icon)); m_icons<
setDuration(400); m_animation->setEasingCurve(QEasingCurve::InOutSine); ui->graphicsView->setRenderHint(QPainter::Antialiasing,true); connect(ui->graphicsView,SIGNAL(sendDelta(int)),this,SLOT(animationRun(int))); thread()->setPriority(QThread::TimeCriticalPriority);}Widget::~Widget(){ delete ui;}qreal Widget::index() const{ return m_index;}void Widget::setIndex(const qreal index){ m_index=index; qreal baseline=0; for(int i=0;i
setPos(pos); baseline=qMax(baseline,ys); static_cast
(icon->graphicsEffect())->setBaseLine(baseline); } m_scene->update();}void Widget::animationRun(int delta){ if(m_animation->state()==QAbstractAnimation::Stopped&&delta){ m_animation->setEndValue(m_index+delta); m_animation->start(); }}

 

转载地址:https://it1995.blog.csdn.net/article/details/82877556 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Qt文档阅读笔记-QThread::setPriority(Priority priority)官方解析及实例
下一篇:Qt工作笔记-自定义开关控件

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年04月15日 09时39分00秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章