我想在Qt-4.7应用程序周围的菜单和按钮中使用SVG。这些图像在linux和Windows平台上正确呈现,但这是令人讨厌的消息......
couldn't create image from ""
...就会打印到控制台。在应用程序运行过程中,许多这些行被打印出来,在合理的应用程序输出周围留下了许多无意义的输出。
稍微探索一下Qt代码,这似乎来自svg/qsvghandler.cpp:2680
,其中该行包含以下内容。
qDebug()<<"couldn't create image from "<<filename;
从qDebug
的文档中,您可以认为我可以通过在编译时定义QT_NO_DEBUG_OUTPUT
来阻止它,但这只会阻止应用程序的编译调试调用,而不是Qt的SVG库中的调用。
所以我想我的问题实际上是双重的:
我也在QtCentre forums上发布了这个问题。
答案 0 :(得分:3)
To#2:您可以通过使用qIntallMsgHandler并编写仅丢弃该消息的处理程序来阻止qDebug输出。另请参阅此问题:How to redirect qDebug, qWarning, qCritical etc output?
答案 1 :(得分:2)
Re#1:我不是SVG的专家,但是从出现该行的Qt源代码中,看起来Qt正在尝试加载xlink:href
属性中引用的图像文件。您看到的输出似乎表明该属性的值为“”,或者该值是一串用“”括起来的空白字符,通过调用QString.trimmed()
将其删除,然后将其用作要加载到QImage中的图像文件的名称。我无法辨别文件名是以空字符串还是两个引号结束:)
我不得不猜测你所拥有的SVG文件都填充了空字符串xlink:href
属性(可能是纹理图像的链接或文件名),或者有一些关于SVG文件的内容导致Qt错误地解析它。我倾向于前者。
您认为正确呈现它们的标准是什么?也许您可以在文本编辑器中打开SVG文件并查看其中的xlink:href
个出现?
答案 2 :(得分:0)
我有类似的问题,我使用Adobe Illustrator创建图像,然后保存为SVG。问题是Illustrator中的隐藏层仍然会写入SVG文件,但其显示属性设置为&#34; none&#34;。在我的例子中,我放置了一个文件的隐藏层&#34;放置&#34; - 了解我创建的背景是否正常。
这会导致您的图像正确渲染,但是Qt抱怨SVG文件中缺少不可见的图层。如果您在文本查看器中打开SVG文件,您可能会发现隐藏层看起来像这样:
<g id="bglogo_x5F_splash" style="display:none;">
<image style="display:inline;overflow:visible;" width="1740" height="438" xlink:href="../logo_preview.png" transform="matrix(1 0 0 1 154 409)">
</image>
</g>
Qt会抱怨失踪&#34; ../ logo_preview.png&#34;文件。
希望这有帮助