【问题标题】:Why does Qt constantly print "couldn't create image from" for SVGs?为什么 Qt 经常为 SVG 打印“无法从其创建图像”?
【发布时间】:2011-08-20 11:10:29
【问题描述】:

我想在 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 库中的那个。

所以我想我的问题实际上有两个方面:

  1. 如标题所示,为什么即使正确渲染 SVG,Qt 也会打印此内容?
  2. 在不重新编译 Qt 或其 SVG 库的情况下,如何防止 Qt 打印此内容并破坏应用程序的输出?

我也在QtCentre forums上发布了这个问题。

【问题讨论】:

    标签: qt qt4 svg


    【解决方案1】:

    到 #2:您可以通过使用 qIntallMsgHandler 并编写一个仅丢弃消息的处理程序来阻止 qDebug 输出。另请参阅此问题:How to redirect qDebug, qWarning, qCritical etc output?

    【讨论】:

    • 这绝对是从您自己的可执行文件中抑制 Qt 库本身的 qDebug() 输出的唯一选项。酷。
    【解决方案2】:

    Re #1:我不是 SVG 方面的专家,但从出现该行的 Qt 源代码来看,Qt 似乎正在尝试加载在 xlink:href 属性中引用的图像文件。您看到的输出似乎表明该属性的值是 "" 或者该值是包含在 "" 中的一堆空白字符,通过调用 QString.trimmed() 将其删除,然后用作名称要加载到 QImage 中的图像文件。我不能完全辨别文件名是空字符串还是两个引号:)

    我不得不猜测您拥有的 SVG 文件填充了空字符串 xlink:href 属性(可能是纹理图像的链接或文件名),或者 SVG 文件存在某些问题导致 Qt 错误地解析它。我会倾向于前者。

    您认为它们被正确渲染的标准是什么?或许您可以在文本编辑器中打开 SVG 文件并查看其中出现的 xlink:href

    【讨论】:

      【解决方案3】:

      我遇到过类似的问题,我使用 Adob​​e Illustrator 创建图像,然后另存为 SVG。问题是 Illustrator 中的隐藏层仍会写入 SVG 文件,但其显示属性设置为“无”。在我的情况下,我“放置”了一个文件的隐藏层 - 以了解我正在创建的背景是否看起来不错。

      这会导致您的图像按照您所说的正确呈现,但 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 会抱怨缺少“../logo_preview.png”文件。

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 2015-08-02
        • 2015-08-03
        • 2021-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-17
        • 1970-01-01
        相关资源
        最近更新 更多