Qt:读写SVG

时间:2025-03-25 08:16:08
  • SvgView::SvgView(const QString &file, QWidget *parent)
  • : QWidget(parent)
  • {
  • doc = new QSvgRenderer(file, this); //QSvgRenderer将SVG图形绘制到绘图设备上
  • connect(doc, SIGNAL(repaintNeeded()), //文档需要更新时发出,通常用来实现动画效果
  • this, SLOT(update()));
  • }
  • void SvgView::paintEvent(QPaintEvent *)
  • {
  • QPainter p(this);
  • p.setViewport(0, 0, width(), height());
  • doc->render(&p);
  • }
  • QSize SvgView::sizeHint() const
  • {
  • if (doc)
  • return doc->defaultSize();
  • return QWidget::sizeHint();
  • }
  • void SvgView::wheelEvent(QWheelEvent *e)
  • {
  • const double diff = 0.1;
  • QSize size = doc->defaultSize();
  • int width = size.width();
  • int height = size.height();
  • if (e->delta() > 0) { //此函数已废弃,用pixelDelta() / angleDelta() instead.
  • width = int(this->width()+this->width()*diff);
  • height = int(this->height()+this->height()*diff);
  • } else {
  • width = int(this->width()-this->width()*diff);
  • height = int(this->height()-this->height()*diff);
  • }
  • resize(width, height);
  • }
  • // void MyWidget::wheelEvent(QWheelEvent *event)
  • // {
  • // QPoint numPixels = event->pixelDelta();
  • // QPoint numDegrees = event->angleDelta() / 8;
  • // if (!()) {
  • // scrollWithPixels(numPixels);
  • // } else if (!()) {
  • // QPoint numSteps = numDegrees / 15;
  • // scrollWithDegrees(numSteps);
  • // }
  • // event->accept();
  • // }