【问题标题】:How to open svg file in QT (QGraphicsView)如何在 QT 中打开 svg 文件(QGraphicsView)
【发布时间】:2014-01-13 19:04:38
【问题描述】:

如何打开 svg 文件,如 png 文件。 例如它适用于 png 文件:

scene=new QGraphicsScene(QRect(10, 10, 680, 520));  
view=new QGraphicsView(this);
image=new QGraphicsPixmapItem(QPixmap("example.png"));

scene ->addItem(image);   
view ->setScene(scene);   
view ->setGeometry(QRect(270, 35, 700, 540));

有什么想法吗?

【问题讨论】:

  • 您能详细说明一下吗? 如何它不适用于 SVG 文件?
  • 当我尝试使用 svg 文件(example2.svg 而不是 example.png)时,它会显示一个白色场景,而不是我的 example2.svg 图像。使用 example.png 它可以工作。
  • 重复问题。我刚刚搜索了“QPixmap SVG”并在第一个提示中找到了这个。见stackoverflow.com/questions/10079011/qpixmap-and-svg
  • 是的。我想试试这个,但 qtsvg 模块有其他问题

标签: c++ qt qgraphicsview qtgui qtsvg


【解决方案1】:

根据我的评论,您可以按照documentation 使用 QGraphicsSvgItem:

QGraphicsSvgItem::QGraphicsSvgItem(const QString & fileName, QGraphicsItem * parent = 0)

用给定的父项构造一个新项目并加载具有指定文件名的 SVG 文件的内容。

所以,你基本上会写如下:

 QGraphicsSvgItem *item = new QGraphicsSvgItem("example.svg");

如果您希望将其与QSvgRenderer 一起使用,也可以按照文档中的示例进行操作。

QSvgRenderer *renderer = new QSvgRenderer(QStringLiteral("example.svg"));
QGraphicsSvgItem *item = new QGraphicsSvgItem();

item->setSharedRenderer(renderer);
item->setElementId(QStringLiteral("example"));

您甚至可以在这里找到更复杂的示例:

SVG Viewer Example

【讨论】:

  • 这很奇怪。我按照你写的那样做,但我得到:“无法读取文件'example.svg',因为:(第2行)”。当文件不存在时,它显示:“无法读取文件'example.svg',因为:没有这样的文件或目录”
  • @user3191398:你能用像inkscape或karbon这样的svn查看器打开example.svg,看看svg本身是否有效吗?
  • 我可以打开。有效
  • 也许 svg 查看器更正了可恢复的错误。请将 svg 上传到某个地方,并提供给我们的链接。以防万一,也尝试其他 svg 文件。
  • @user3191398:如前所述,应将顶部的 html 更改为 xml 以使其正常工作。也许,有一种明确的方法可以让它发挥作用,但这至少应该能让你继续前进。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-23
  • 2012-10-02
  • 1970-01-01
  • 2011-11-04
相关资源
最近更新 更多