首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt QGraphicsSvgItem缩放和调整

Qt QGraphicsSvgItem缩放和调整
EN

Stack Overflow用户
提问于 2016-05-09 11:18:01
回答 2查看 1.7K关注 0票数 0

我以QGraphicsSvgItem的名字创建了继承的类,并将其命名为MyObject。我希望为它指定一个图标,但同时我希望能够重新设置它,这样我就可以使用一个图标来表示不同的对象(例如,Door-Icon.svg用于显示小门和大门)。现在它有了一个问题--没有办法从*.svg本身恢复图像。我试着和QPixmap一起工作,但是它给了我一些像素。

代码语言:javascript
复制
  class MyObject : public QGraphicsSvgItem
  {
      void assign_Icon(QString Path);
      void rescale_Icon(QString Path);
      int Widith;
      int Height;
        // ...
  }

的职能如下:

代码语言:javascript
复制
  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图标的大小,使之成为对象当前的宽度和高度。

代码语言:javascript
复制
  void MyObject::rescale_Icon(QString Path)
  {
      QSvgRenderer *renderer = new QSvgRenderer(Path);
      this->setSharedRenderer(renderer);
      // But what to do here?
  }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-09 13:20:54

以下列方式解决该问题:

代码语言:javascript
复制
    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());
    }
票数 4
EN

Stack Overflow用户

发布于 2016-05-09 12:46:45

代码语言:javascript
复制
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 =新的GraphicsColorSvgItem;和规模需要: itemSVG->setScale(scale_value);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37114430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档