Qt文档阅读笔记-QGraphicsEffect::draw(QPainter *painter)官方解析与实例
目录
官方解析
博主例子
官方解析
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)官方解析与实例相关推荐
- Qt文档阅读笔记-QThread::setPriority(Priority priority)官方解析及实例
目录 官方解析 博主栗子 官方解析 QThread::setPriority(Priority priority) 这个函数为运行的线程设置了优先级.如果这个线程没有运行,那么这么函数啥事都不会做,并 ...
- Qt文档阅读笔记-Advanced Signals and Slots Usage解析与实例
目录 官方解析 博主小栗子 对官方例子的实现 通过自定义信号与槽的方式,巧妙实现QSignalMap的功能 官方解析 某些时刻需要知道是哪个对象发的信号,可以用Qt提供了QObject::sender ...
- OpenCV文档阅读笔记-brief Creates a window官方解析及实例
目录 官方解析 博主例子 官方解析 brief Creates a window 简单创建一个窗口 这个函数可以创建一个窗口用来放图片,更具图片名来创建的窗口. 如果这个窗口的名字已经被创建,那么这个 ...
- Qt文档阅读笔记-对JSON Save Game官方实例解析
程序运行截图如下: JSON Save Game例子展示了如何使用QJsonDocument,QJsonObject,QJsonArray保存和加载存档. 许多游戏有存储的功能,允许玩家存储保存游戏进 ...
- Qt文档阅读笔记-共享库的创建与调用
使用共享库的符号 这个符号可以作用在变量.类.函数中,并且这些都可以被调用端使用. 在编译共享库中,需要使用export符号.在使用端调用的时候使用import符号. 这里是本人从文档中记录的笔记,大 ...
- Qt文档阅读笔记-加载HeightMap(高度图)构造3D地形图
Qt文档阅读笔记-加载HeightMap(高度图)构造3D地形图 QHeightMapSurfaceDataProxy:是Q3DSurface的一个基本代理类. 他是专门加载高度图. 高度图是没有X, ...
- Qt文档阅读笔记-Rotations Example相关
Rotations Example文档阅读笔记 使用这种方式,对y轴和z轴进行旋转. QQuaternion yRotation = QQuaternion::fromAxisAndAngle(0.0 ...
- Qt文档阅读笔记-QWebEngineView及QML WebEngineView
这里主要是最近有给Java Web项目及Qt项目需要混合,自己搞的QtWebEngine没有问题,而用了项目里面的,就有问题,在此阅读下官方资料,看看能不能解决这样莫名其妙的问题,在此记录下本次的阅读 ...
- Qt文档阅读笔记-moc工具使用及其理论(moc工具如何添加到makefile中)
moc(Meta-Object Compiler):用于处理Qt中关于C++的扩展. moc工具读取C++头文件,看看这个头文件里面的类是不是包含Q_OBJECT宏,它会将这个头文件,转换为带有met ...
最新文章
- Microsoft Windows 10的LTSC 2019和Version 1809更新简单说明
- np.zeros(),np.empty()
- JZOJ 5477. 【NOIP2017提高组正式赛】宝藏
- Linux中.rpm,Linux中rpm的使用
- 全面介绍Windows内存管理机制及C++内存分配实例(二):内存状态查询
- DirectX - dds图片格式(DDSURFACEDESC2)
- strus2中配置jqgrid入门
- Druid:数据库连接池实现技术,由阿里巴巴提供的
- python矩阵所有元素取整_Python中如何对一个数值进行取整操作呢?
- byteofpython中文gitbook_Gitbook快速简明教程
- 天然气压缩因子计算软件_测量天然气用什么流量计?
- 到底买苹果XS还是XR_苹果x苹果xr苹果xs的区别
- 危机四伏,卡士酸奶的高端人设还立得住吗?
- Android Glide加载网络图片不显示,但浏览器能打开图片
- 学习笔记——VLSI测试方法学和可测性设计
- ie浏览器打开aspx文件乱码_关于ASP使用IE8下载文件,文件内容乱码问题
- 英国电信官宣入华,三大运营商慌不慌?
- 三维动漫计算机配置,三维动画软件之Houdini软件的电脑配置要求_渲云动态
- MATLAB算法实战应用案例精讲-【数模应用】决策树(附MATLAB、Java和Python代码)
- 用户信息管理(web综合实践)