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

RSS подписка

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

Статьи - Компьютерное

Программирование на 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>.

 

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

 



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

Поделиться этой страницей



Внимание!


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

 

База Xintrea (стр. 1)

База Rarrugas (стр. 1)

База Balas

База YellowRaven

База Yurons

База Lesnik757

База Shandor

База Sirrichar

База Anatolean (стр. 1)

База Аrmagedec

База SorokinRed

База Deadelf79

База Adgaver (стр. 1)

База Pipitos1983

База Soxsten (стр. 1)

База Silenn (стр. 1)

База Shlyapnikova - херомантия и ригидность

База Svoynickname (стр. 1)

База Larson227 (стр. 1)

База Velonski (стр. 1)

База BrokeRU (стр. 1)

База Mcold (стр. 1)

База Alensav (стр. 1)

База Consp11 (стр. 1)

База Kozlov-AE (стр. 1)

База Wwwlir (стр. 1)

База Duwaz (стр. 1)

 

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

 

База Tairesh

База Ivnglkv

База Kolyag87

База Andyk101

База Garik456456

База Harpokrat

База SalexIzyh

База RuDennn (Bunny-Hop)

База Manakaden

База Vitvrn

База Fanrok

База Grimar

База_Juryak

База Nicolasomsk

База Azatserikbaev

База Shut913

 

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

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