I use SVG images almost exclusively in my apps, but there are downsides to SVGs:

  • PNGs are easier to create. Everyone and their dog has written something to edit bitmaps. SVG image editors are way harder to build -- there aren't many good ones. I use InkScape because it produces compatible SVGs.
  • SVG compatibility is not good. For example, Qt doesn't support drop shadows in SVGs. There is a way to do it through masks, but it is not easy... as opposed to PNGs.
  • SVGs are tricky to use; you must set the sourceSize as well as the width & height.
  • SVGs draw more slowly when resized because they are complicated to parse. You can get around this by setting the sourceSize to larger than what you need. Then changing width & height is as fast as a PNG image.
  • SVGs have the promise of animation... but you can't use it in QML. You need to modify the xml content then re-render the SVG -- that's not supported out-of-the-box. You can use an animated GIF in QML... yet another bitmap format.


I use SVGs for precisely the reason you gave; my output resolution may change. I do embedded development and I scoff at PNG-based interfaces that may require reworking bitmaps to support a new resolution and then there's the time it takes to validate the whole UI; as opposed to an SVG-based UI that just works.

SVG has limitations but the benefits outweigh the costs for me.