日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時間:2025/3/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt文档阅读笔记-QGraphicsEffect::draw(QPainter *painter)官方解析与实例 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

官方解析

博主例子


?

官方解析

QGraphicsEffect::draw(QPainter *painter)
這個純虛函用于繪制效果,并且在原圖需要被繪制的時候被調(diào)用。
在QGraphicsEffect的派生類里面重寫這個函數(shù)是用于提供使用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);}...}


這個函數(shù)不應(yīng)該被用戶顯示的調(diào)用,因為這個函數(shù)只用于重新實現(xiàn)。

博主例子

自己寫的很有趣的小例子,程序運行截圖如下:

源碼如下:

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()); }

?

新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎!定制產(chǎn)品紅包拿不停!

總結(jié)

以上是生活随笔為你收集整理的Qt文档阅读笔记-QGraphicsEffect::draw(QPainter *painter)官方解析与实例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。