问题标签 [qtsvg]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
835 浏览

qt - 从 QSvgRenderer 获取 SVG 大小

假设我有一个像这样的 SVG:

使用QSvgRenderer::viewBoxF()我可以获得0 0 100 200视图框,但是有什么方法可以获得width="300mm"and height="600mm"

(除了自己解析 XML 的显而易见的事情。)

0 投票
0 回答
304 浏览

python-3.x - 是否可以使用 PyCharm 将 QtSvg for PyQt5 安装到 venv 中(不通过 apt-get 等使用 os 包)?

我的 Python3 项目需要 Python3 上的 QtSvg 模块(来自 PyQt5)。如何(自动)使用 PyCharm 将缺少的 QtSvg 安装到 venv 等中?

我知道在基础 python3-pyqt5 之上有特定于操作系统发行版的包,它们分别引入了 QtSvg。但是,我想允许我的 PyPI 包 ( linuxns-rel) 的用户通过pip3.

是否可以通过 PyCharms 包管理为 PyQt5 安装 QtSvg?我尝试通过 PyCharms 项目包管理安装 PyQt5 以将其安装到特定于项目的 venv 中,但这总是无法引入 QtSvg。

注意:使用特定于项目的手动删除 PyQt5 venv/bin/pip3,然后使用 finally 再次安装 PyQt5--no-cache-dirvenv/bin/pip3带来一个正常工作的 PyQt5。

那我是不是被一个损坏的 PyQt5 包咬了?如何正确地将 PyCharm 中的完整 PyQt5 安装到 venv 中?

0 投票
1 回答
278 浏览

python - 如何阻止 QSvgWidget 生成它自己的窗口

我刚刚研究了如何使用 QSvgWidget 在 pyqt5 中显示 svg 图像,并尝试将其移植到使用 qt 设计器创建的空白 gui 中。svg 图像显示但在它自己的窗口中,而不是在容器或边界中。

我试图通读 QSvgWidget 文档以查看我做错了什么,但我觉得这是我如何使用 PyQT5 而不是 QSvgWidget 的问题。

结果如下所示:

在此处输入图像描述

而我只是希望 svg 出现在主窗口内的边框中并缩放到边框或窗口大小

0 投票
1 回答
491 浏览

c++ - QSvgGenerator 在生成 Svg 时将 QSvgGraphicsItem 转换为图像

我有一堆 SVG 文件,我已经将它们(作为 QGraphicsSvgItem)加载到 QGraphicsScene 中进行设计,一切正常,现在我想使用 QSvgGenerator 将场景保存到另一个输出 SVG 文件(包括所有 Svg 项目)中下面的代码,但是当它导出 SVG 项目时,它会在输出文件中变成图像,并且它们的矢量不再是可伸缩的。

如果这个 Qt 框架没有直接的解决方案,我期待 XML 操作方法。

我期待一个输出 svg 文件,其中包含包含的内部 SVG 项目的标签和节点(不将它们转换为图像数据)

现在它正在将内部 svg 项目转换为这些图像标签:

更新 1 这个小应用程序将在图形场景中显示一个 svg 文件 (QGraphicsSvgItem),并将使用 QSvgGenerator 将场景导出到另一个输出 svg 文件中:

但我得到的是一个 svg 文件,其中包含初始 svg 文件质量非常低的图像的转换损坏位。我期望的是 QSvgGenerator 从源文件中获取初始 svg 元素(可能保存在场景中的 QGraphicsSvgItem 中)并将它们放入最后生成的文件中。

0 投票
1 回答
710 浏览

python - 可点击的 SVG 图像运行方法

我创建了一个需要交互的地图(火车)的 SVG 图像,当单击地图的一部分时,颜色会改变,并且会执行控制事物的方法(通过树莓派)。

将按钮连接到插槽很简单,我猜测我尝试过:

是否可以单击 SVG 元素并让它根据给定的方法执行方法,id就像单击按钮时一样?

这是一个MVCE:

测试.svg

svg_widget.py

0 投票
1 回答
119 浏览

python - QtSvg 忽略单位

有没有办法让 QSvgWidget/QSvgRenderer 与 cm/mm/in/pc 等单位一起使用?

这是一个示例 SVG,其中所有行都应具有相同的长度(它在 Firefox 和 Chrome 中正确呈现):

这是我的观众:

如果我用这个查看器打开 SVG,QT 似乎会忽略所有单位并读取属性,x2="105.82mm"x2="105.82"

Qt 中的结果:

在此处输入图像描述

结果在 Firefox 中:

在此处输入图像描述

QT 和 PySide2 都是 5.14.1 版本

0 投票
1 回答
76 浏览

qt - 如何使 QSvgGenerator 生成矢量化 SVG 而不是位图 SVG?

我正在尝试将我的导出QGraphicsScene到这样的 SVG:

MyScene继承自QGraphicsScene

在我的场景中,我有继承自QGraphicsItem.

我的项目呈现如下:

现在的问题是我只得到一个位图 SVG,所以它基本上没用。像这样的东西:

为了真正获得 SVG 而不是位图,我应该在我的项目中做一些特别的事情吗?

编辑:这似乎是相关的,但在我的情况下禁用缓存对普通 QGraphicsItems 没有帮助:QSvgGenerator 在生成 Svg 时将 QSvgGraphicsItem 转换为图像

0 投票
0 回答
46 浏览

python - 使用 QSvgWidget 时 SVG 文本错位

我有一个固定大小的 PySide2 窗口 (800x480),它是使用 pyside2-uic 和一个包含一些文本的 SVG 文件创建的,该文件是在 Inkscape 中以匹配的 800mm x 480mm 格式创建的。这就是它的样子(SVG 使用inkscape 转换为PNG):

在此处输入图像描述

现在我只想在 PySide2 窗口中按需显示 SVG 文件。我正在使用以下方法:

但是有两个问题:第一个是 SVG 显示在我的窗口中,但它在每一侧的窗口边框都有约 10 像素的边距(在下面的屏幕截图中背景设置为蓝色以提高可见性)。我设法通过在中央小部件 PaintEvent 中设置几何图形(与上面的“setGeometry”行相同的代码)来解决这个问题。出于某种原因,它可以在没有余量的情况下工作,但我不明白为什么。

在此处输入图像描述

第二个也是更严重的问题是,所有文本都放错了位置,如上面的屏幕截图所示。无论我尝试哪种方法(有或没有边距),都会发生这种情况。显示带有文本的 SVG 文件的正确方法是什么?


SVG 文件: