Собираем
информацию
по крупицам

Программирование на C++ и Qt

Qt: как бороться с ошибкой "Point size <= 0 (0), must be greater than 0"
16-06-2011
18:36:50

Многие, кто делает программы на фреймверке 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>.

 

После такого исправления, надоедливые предупреждения в консоли исчезли.

 


К списку "Компьютерное"

Интересное на сайте


ПЭВМ "Микроша" » Комплект программ "Редактор и Ассемблер" для ПЭВМ "Микроша"

Часть документации на ПЭВМ "Микроша" с описанием работы текстового редактора и транслятора ассемблера. Данный комплект программ занимал 4Кб: 2Кб уходи...


Web - разработка » Как добавить Userscript в браузер Chrome

С удивлением обнаружил, что в интернете отсутствует информация на русском языке о том, как устанавливать в Chrome юзерскрипты. Я пользуюсь Chome тол...


Юмор » ЛОР. Призрак в опере? Нет проблем, обеспечим!

Да! ЛОР снова торт. Если кто еще не знает, 9 октября 2011 года усилиями однозвёздного пользователя bk_ стартовала Гитарная Битва Луноходов.   На...

RSS подписка

Подпишитесь на новости сайта по RSS


Лучшие дц форекс. Рейтинг брокеров форекс www.obrokerah.ru.
http://www.ezramed.ru/ кселода xeloda.

Внимание!


На этом сайте разрабатывается программа MyTetra и её родственные проекты. Доступны к просмотру следующие базы знаний:

 

База Xintrea (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19)

База Rarrugas (1, 2)

База Balas

База YellowRaven

База Yurons

База Lesnik757

База Shandor

База Sirrichar

База Anatolean

База Аrmagedec

База SorokinRed

База Deadelf79

 

Требуют доработки:

 

База Tairesh

База Ivnglkv

База Kolyag87

База Andyk101

База Garik456456

База Harpokrat

База SalexIzyh

База Duwaz

 

Подробности на странице MyTetra Share.

 WebHamster.Ru
 Домик любопытного хомячка
Яндекс индекс цитирования
Почтовый ящик