【问题标题】:Qt QGraphicsSvgItem scaleing and resizeingQt QGraphicsSvgItem 缩放和调整大小
【发布时间】:2016-05-09 11:18:01
【问题描述】:

我在QGraphicsSvgItem 之后创建了类继承并将其命名为MyObject。我希望为其分配一个图标,但同时我希望能够重新调整它,以便我可以使用一个图标来呈现不同的对象(例如,Door-Icon.svg 用于呈现小门和大门)。现在它有一个问题 - 没有选项可以从 *.svg 本身重新缩放图像。我尝试使用QPixmap,但它给了我像素化的图像。

  class MyObject : public QGraphicsSvgItem
  {
      void assign_Icon(QString Path);
      void rescale_Icon(QString Path);
      int Widith;
      int Height;
        // ...
  }

和功能:

  void MyObject::assign_Icon(QString Path)
  {
      QSvgRenderer *renderer = new QSvgRenderer(Path);
      this->setSharedRenderer(renderer);
      Widith =  this->renderer()->defaultSize().width();
      Height =  this->renderer()->defaultSize().height();
  }

仅以基本尺寸呈现*.svg 效果很好,但我无法找到“如何”将*.svg 图标调整为对象当前宽度和高度。

  void MyObject::rescale_Icon(QString Path)
  {
      QSvgRenderer *renderer = new QSvgRenderer(Path);
      this->setSharedRenderer(renderer);
      // But what to do here?
  }

【问题讨论】:

    标签: c++ qt svg


    【解决方案1】:

    通过以下方式解决:

        QRectF MyObject::boundingRect() const
        {
            return QRectF(0,0,Widith,Height);
        }
    
        void MyObject::paint(QPainter *painter, const QStyleOptionGraphicsItem *options, QWidget *widget)
        {
            this->renderer()->render(painter, boundingRect());
        }
    

    【讨论】:

      【解决方案2】:
      void GraphicsColorSvgItem::paint(QPainter* painter,
                                   const QStyleOptionGraphicsItem*option,
                                   QWidget *widget)
      {
          Q_UNUSED(option);
          Q_UNUSED(widget);
      
          _renderer.load(initFileSvg().toUtf8());
      
          painter->setRenderHint(QPainter::Antialiasing, true);
          painter->fillPath(shape(), Qt::NoBrush);
      
          //Start draw SVG file and set Rect
          _renderer.render(painter,QRect(0,
                                     0,
                                     getItemSize().width(),
                                     getItemSize().height()));
          _fileSvg.close();
          painter->setRenderHint(QPainter::Antialiasing, false);
      }
      QString GraphicsColorSvgItem::initFileSvg()
      {
          _fileSvg.setFileName(getFileName());
          _fileSvg.open(QIODevice::ReadOnly | QIODevice::Text);
          _str.setDevice(&_fileSvg);
          _content = _str.readAll();
      
          return _content;
      }
      

      创建对象这个类 GraphicsColorSvgItem itemSVG = new GraphicsColorSvgItem; 并满足规模需求: itemSVG->setScale(scale_value);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-26
        • 1970-01-01
        • 1970-01-01
        • 2017-02-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多