Qt文档阅读笔记-QGraphicsEffect::draw(QPainter *painter)官方解析与实例
发布日期:2021-06-30 10:56:47
浏览次数:2
分类:技术文章
本文共 3716 字,大约阅读时间需要 12 分钟。
目录
官方解析
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#include QT_BEGIN_NAMESPACEclass 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#includeclass BlurEffect;QT_BEGIN_NAMESPACEclass 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#include #include #include 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"#includeint 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#include #include #include 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());}
转载地址:https://it1995.blog.csdn.net/article/details/82862494 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2024年04月18日 11时17分35秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
POJ初级分类 贪心专题 poj1328 POJ2109 POJ 2586
2019-04-30
Codeforces Round #356 (Div. 2)
2019-04-30
图论五百题
2019-04-30
最短路径 啊哈算法读书笔记
2019-04-30
Codeforces Round #358 (Div. 2)
2019-04-30
离散数学第六章 图
2019-04-30
hdu 1548 A strange lift(最短路)
2019-04-30
HDOJ 2544 最短路(四种做法)
2019-04-30
HDOJ 3790 最短路径问题
2019-04-30
HDU 3788 ZOJ问题
2019-04-30
UVa 401 Palindromes(简单字符串)
2019-04-30
POJ1694 An Old Stone Game
2019-04-30
Codeforces Round #359 (Div. 2)
2019-04-30
HDU-2896 病毒侵袭 && HDU-3065 病毒侵袭持续中(AC自动机)
2019-04-30
Manacher算法(O(n)求得最长回文)
2019-04-30
POJ-3080 Blue Jeans(简单字符串)
2019-04-30
HDU-2594 Simpsons’ Hidden Talents(KMP)
2019-04-30
Codeforces Round #368 (Div. 2)
2019-04-30
HDU-1274 Hat’s Words(Trie树)
2019-04-30