Qt QGraphicsSvgItem 缩放和调整大小
Posted
技术标签:
【中文标题】Qt QGraphicsSvgItem 缩放和调整大小【英文标题】:Qt QGraphicsSvgItem scaleing and resizeing 【发布时间】: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?
【问题讨论】:
【参考方案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);
【讨论】:
以上是关于Qt QGraphicsSvgItem 缩放和调整大小的主要内容,如果未能解决你的问题,请参考以下文章
PyQt4:QPainter 和 QGraphicsSvgItem