Многие, кто делает программы на фреймверке Qt 4.x, может натолкнутся на то, что запущенная программа в какой-то момент начинает сыпать бесконечными предупреждениями:
[WRN] QFont::setPointSize: Point size <= 0 (0), must be greater than 0
Поиск по рунету и интернету показывает, что никто толком не знает, какой код вызывает появление этого сообщения, и как его убрать. Единственное хоть что-то объясняющее предположение гласило, что где-то происходит выход за границу массива, и портится движок рендеринга шрифтов.
На самом деле проблема не в вашем коде, и не в коде Qt. Проблема в нечетком соблюдении открытых стандартов в разных программах.
Дело в том, что вышеуказанное предупреждение появляется только в тот момент, когда в программе начинают использовать SVG-изображения, например для иконок меню. А в чем обычно подготавливают SVG-изображения? Правильно, в Inkscape.
Так вот оказывается, что Inkscape (по крайней мере версия 0.47) иногда генерирует некорректный SVG-код. Причем момент, когда будет сгенерирован кривой SVG, предсказать трудно. Это зависит от действий, которые вы совершали при редактировании. Проблема в том, что Inkscape может засунуть недопустимые CSS-свойства в объект, которые эти свойства не должен поддерживать впринципе.
Например, изогнутая линия кодируется в XML-коде SVG файла как элемент <path>. В нормальном случае, атрибут style этого элемента будет содержать только данные, применимые к данному элементу, например:
<path
style="color:#000000;
fill:none;
stroke:#000000;
stroke-width:2;
stroke-miterlimit:4;
stroke-dasharray:none;
marker:none;
visibility:visible;
display:inline;
overflow:visible;
enable-background:accumulate"
d="m 3.0625,9.4285719 0,-2.9714288
c 0,-2.4616123 1.7628789,-4.4571432 3.9375003
l 0,2.9714288"
id="path3633"
sodipodi:nodetypes="ccccc"/>
В ненормальном случае, в атрибут style будут включены свойства текста font-..., что для элемента <path> не имеет никакого смысла:
<path
style="font-size:medium;
font-style:normal;
font-variant:normal;
font-weight:normal;
font-stretch:normal;
text-indent:0;
text-align:start;
text-decoration:none;
line-height:normal;
letter-spacing:normal;
word-spacing:normal;
text-transform:none;
direction:ltr;
block-progression:tb;
writing-mode:lr-tb;
text-anchor:start;
color:#000000;
fill:#999999;
fill-opacity:1;
stroke:none;
stroke-width:1.99999988;
marker:none;
visibility:visible;
display:inline;
overflow:visible;
enable-background:accumulate;
font-family:Bitstream Vera Sans;"
d="m 7.0980961,0.90625
c -2.6263167,0 -4.777193,
l 0,2.9687504 1.737161,0 0,-2.9687504"
id="path3032" />
Вот на таком SVG-теге и спотыкается SVG-рендер, встроенный в Qt, и выдает непрекращающийся поток предупреждений.
Что можно сделать в данном случае? Я пытался в Inkscape сохранить SVG-картинку в формате "чистого SVG". Это не помогает. Так как у меня оказалась только одна проблемная картинка, я просто руками (ну не руками, а через sed, конечно) удалил все вхождения font-... и text-... в свойстве style элемента <path>.
После такого исправления, надоедливые предупреждения в консоли исчезли.