目录

官方解析

博主例子


官方解析

QGraphicsEffect::draw(QPainter *painter)
这个纯虚函用于绘制效果,并且在原图需要被绘制的时候被调用。
在QGraphicsEffect的派生类里面重写这个函数是用于提供使用painter达到绘制的效果。
栗子:

  MyGraphicsEffect::draw(QPainter *painter){...QPoint offset;if (sourceIsPixmap()) {// No point in drawing in device coordinates (pixmap will be scaled anyways).const QPixmap pixmap = sourcePixmap(Qt::LogicalCoordinates, &offset);...painter->drawPixmap(offset, pixmap);} else {// Draw pixmap in device coordinates to avoid pixmap scaling;const QPixmap pixmap = sourcePixmap(Qt::DeviceCoordinates, &offset);painter->setWorldTransform(QTransform());...painter->drawPixmap(offset, pixmap);}...}

这个函数不应该被用户显示的调用,因为这个函数只用于重新实现。

博主例子

自己写的很有趣的小例子,程序运行截图如下:

源码如下:

blureffect.h

#ifndef BLUREFFECT_H
#define BLUREFFECT_H#include <QGraphicsBlurEffect>
#include <QSize>QT_BEGIN_NAMESPACE
class QGraphicsItem;
QT_END_NAMESPACEclass BlurEffect : public QGraphicsBlurEffect
{
public:BlurEffect(QGraphicsItem *item);void setBaseLine(const qreal y);void setGraphicsItemSize(const QSize size);void draw(QPainter *painter)Q_DECL_OVERRIDE;private:void adjustForItem();qreal m_baseLine;QGraphicsItem *m_item;QSize m_size;
};#endif // BLUREFFECT_H

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>class BlurEffect;QT_BEGIN_NAMESPACE
class QGraphicsPixmapItem;
QT_END_NAMESPACEnamespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();public slots:void timeout();private:Ui::Widget *ui;BlurEffect *m_blurEffect;QGraphicsPixmapItem *m_item;
};#endif // WIDGET_H

blureffect.cpp

#include "blureffect.h"
#include <QGraphicsItem>
#include <QPainter>
#include <QPen>
#include <QDebug>BlurEffect::BlurEffect(QGraphicsItem *item):QGraphicsBlurEffect(),m_baseLine(200),m_item(item)
{}void BlurEffect::setBaseLine(const qreal y)
{m_baseLine=y;
}void BlurEffect::setGraphicsItemSize(const QSize size)
{m_size=size;
}void BlurEffect::draw(QPainter *painter)
{adjustForItem();painter->save();QPen pen(QColor(abs((int)m_baseLine%256),abs((int)m_baseLine%256),abs((int)m_baseLine%256)));pen.setWidth(3);painter->setPen(pen);painter->drawRect(0,0,m_size.width(),m_size.height());painter->restore();QGraphicsBlurEffect::draw(painter);
}void BlurEffect::adjustForItem()
{qreal y=m_baseLine-m_item->scenePos().y();qreal radius=qBound(qreal(0.0),y/32,qreal(16.0));setBlurRadius(radius);
}

main.cpp

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

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include "blureffect.h"
#include <QGraphicsScene>
#include <QDebug>
#include <QTimer>
#include <QGraphicsPixmapItem>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);this->setWindowTitle("CSDN IT1995");ui->graphicsView->setScene(new QGraphicsScene);m_item=new QGraphicsPixmapItem;m_item->setPixmap(QPixmap(":/src.jpg"));ui->graphicsView->scene()->addItem(m_item);m_item->setFlags(QGraphicsItem::ItemIsMovable|QGraphicsItem::ItemIsSelectable);m_blurEffect=new BlurEffect(m_item);m_blurEffect->setGraphicsItemSize(m_item->boundingRect().size().toSize());m_item->setGraphicsEffect(m_blurEffect);QTimer *timer=new QTimer(this);connect(timer,SIGNAL(timeout()),this,SLOT(timeout()));timer->start(500);
}Widget::~Widget()
{delete ui;
}void Widget::timeout()
{m_blurEffect->setBaseLine(m_item->scenePos().x()+m_item->scenePos().y());
}

Qt文档阅读笔记-QGraphicsEffect::draw(QPainter *painter)官方解析与实例相关推荐

  1. Qt文档阅读笔记-QThread::setPriority(Priority priority)官方解析及实例

    目录 官方解析 博主栗子 官方解析 QThread::setPriority(Priority priority) 这个函数为运行的线程设置了优先级.如果这个线程没有运行,那么这么函数啥事都不会做,并 ...

  2. Qt文档阅读笔记-Advanced Signals and Slots Usage解析与实例

    目录 官方解析 博主小栗子 对官方例子的实现 通过自定义信号与槽的方式,巧妙实现QSignalMap的功能 官方解析 某些时刻需要知道是哪个对象发的信号,可以用Qt提供了QObject::sender ...

  3. OpenCV文档阅读笔记-brief Creates a window官方解析及实例

    目录 官方解析 博主例子 官方解析 brief Creates a window 简单创建一个窗口 这个函数可以创建一个窗口用来放图片,更具图片名来创建的窗口. 如果这个窗口的名字已经被创建,那么这个 ...

  4. Qt文档阅读笔记-对JSON Save Game官方实例解析

    程序运行截图如下: JSON Save Game例子展示了如何使用QJsonDocument,QJsonObject,QJsonArray保存和加载存档. 许多游戏有存储的功能,允许玩家存储保存游戏进 ...

  5. Qt文档阅读笔记-共享库的创建与调用

    使用共享库的符号 这个符号可以作用在变量.类.函数中,并且这些都可以被调用端使用. 在编译共享库中,需要使用export符号.在使用端调用的时候使用import符号. 这里是本人从文档中记录的笔记,大 ...

  6. Qt文档阅读笔记-加载HeightMap(高度图)构造3D地形图

    Qt文档阅读笔记-加载HeightMap(高度图)构造3D地形图 QHeightMapSurfaceDataProxy:是Q3DSurface的一个基本代理类. 他是专门加载高度图. 高度图是没有X, ...

  7. Qt文档阅读笔记-Rotations Example相关

    Rotations Example文档阅读笔记 使用这种方式,对y轴和z轴进行旋转. QQuaternion yRotation = QQuaternion::fromAxisAndAngle(0.0 ...

  8. Qt文档阅读笔记-QWebEngineView及QML WebEngineView

    这里主要是最近有给Java Web项目及Qt项目需要混合,自己搞的QtWebEngine没有问题,而用了项目里面的,就有问题,在此阅读下官方资料,看看能不能解决这样莫名其妙的问题,在此记录下本次的阅读 ...

  9. Qt文档阅读笔记-moc工具使用及其理论(moc工具如何添加到makefile中)

    moc(Meta-Object Compiler):用于处理Qt中关于C++的扩展. moc工具读取C++头文件,看看这个头文件里面的类是不是包含Q_OBJECT宏,它会将这个头文件,转换为带有met ...

最新文章

  1. Microsoft Windows 10的LTSC 2019和Version 1809更新简单说明
  2. np.zeros(),np.empty()
  3. JZOJ 5477. 【NOIP2017提高组正式赛】宝藏
  4. Linux中.rpm,Linux中rpm的使用
  5. 全面介绍Windows内存管理机制及C++内存分配实例(二):内存状态查询
  6. DirectX - dds图片格式(DDSURFACEDESC2)
  7. strus2中配置jqgrid入门
  8. Druid:数据库连接池实现技术,由阿里巴巴提供的
  9. python矩阵所有元素取整_Python中如何对一个数值进行取整操作呢?
  10. byteofpython中文gitbook_Gitbook快速简明教程
  11. 天然气压缩因子计算软件_测量天然气用什么流量计?
  12. 到底买苹果XS还是XR_苹果x苹果xr苹果xs的区别
  13. 危机四伏,卡士酸奶的高端人设还立得住吗?
  14. Android Glide加载网络图片不显示,但浏览器能打开图片
  15. 学习笔记——VLSI测试方法学和可测性设计
  16. ie浏览器打开aspx文件乱码_关于ASP使用IE8下载文件,文件内容乱码问题
  17. 英国电信官宣入华,三大运营商慌不慌?
  18. 三维动漫计算机配置,三维动画软件之Houdini软件的电脑配置要求_渲云动态
  19. MATLAB算法实战应用案例精讲-【数模应用】决策树(附MATLAB、Java和Python代码)
  20. 用户信息管理(web综合实践)

热门文章

  1. Google服务你都用了哪些?
  2. 人工智能里一种实现机器学习的技术
  3. i-p2psearcher开源软件源码下载
  4. 微软对键盘上的Page Up Page Down按钮享有专利权
  5. Python 基础,不看会后悔哦!
  6. 87个常用电脑快捷键大全,别让速度限制你的工资,建议收藏一份!
  7. Nanachi发布:基于 React 的多端小程序转译框架
  8. HTML5新特征、窍门和技术(6~10)
  9. HTML5 API详解(16):web socket 全双工通信
  10. java j2se1.5_Java教程 用J2SE1.5建立多任务的Java应用程序