#include <QApplication>
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QSvgRenderer>
class SvgGraphicsItem : public QGraphicsItem
{
public:SvgGraphicsItem(const QString &svgFilePath, QGraphicsItem *parent = nullptr): QGraphicsItem(parent){// 启用项的拖动功能setFlag(QGraphicsItem::ItemIsMovable);// 使用QSvgRenderer加载SVG文件m_renderer = new QSvgRenderer(svgFilePath);}// 返回项的边界矩形QRectF boundingRect() const override {//return QRectF(QRect(QPoint(0, 0), m_renderer->defaultSize())); // 返回SVG的视图框作为边界矩形return m_renderer->viewBoxF();}// 绘制SVGvoid paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override {Q_UNUSED(option);Q_UNUSED(widget);// 使用QSvgRenderer来绘制SVG内容m_renderer->render(painter,QRectF(QRect(QPoint(0, 0), m_renderer->defaultSize())));}private:QSvgRenderer *m_renderer; // QSvgRenderer用于加载和渲染SVG
};
class MyGraphicsView : public QGraphicsView
{
public:MyGraphicsView(QGraphicsScene *scene) : QGraphicsView(scene) {}protected:// 重写滚轮事件,实现缩放void wheelEvent(QWheelEvent *event) override {// 使用滚轮进行缩放if (event->angleDelta().y() > 0)scale(1.2, 1.2); // 放大elsescale(0.8, 0.8); // 缩小}
};
int main(int argc, char *argv[])
{QApplication app(argc, argv);// 创建 QGraphicsScene 和 QGraphicsViewQGraphicsScene scene;MyGraphicsView view(&scene);SvgGraphicsItem *svgItem = new SvgGraphicsItem("C:/Users/HEU_W/Downloads/miyao.svg");scene.addItem(svgItem);// 设置视图view.setRenderHint(QPainter::Antialiasing, true); // 启用抗锯齿view.setRenderHint(QPainter::SmoothPixmapTransform, true); // 平滑缩放view.setRenderHint(QPainter::TextAntialiasing); // 文本抗锯齿view.setSceneRect(svgItem->boundingRect()); // 设置视图的显示范围// 显示视图view.show();return app.exec();
}
使用下面的方法可以实现QGraphicsItem的拖动功能
setFlag(QGraphicsItem::ItemIsMovable);
继承QGraphicsView 重写滚轮事件可以实现视图缩放