Собираем
информацию
по крупицам
Статьи - Компьютерное

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

 

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

 


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

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


Демо на Ассемблере » Spear

Размер: 512 байт Требования: DOS 6.22 Год: 1999   Первое место в номинации 512 Byte на Paradox-99.   Скачать   Смотреть на YouTube...


Игры под Windows » Shareholder (Акционер)

Игра, написанная вместе с Сергеем Шпаковым. Разработка застыла на этапе глубокой беты. Шпаков сделал интерфейс и хотсид, я писал искуственный интеллек...


BASH » Cron Emulator

Многие системные администраторы Linux часто сталкиваются с одной и той же проблемой: при попытке запуска команды из-под демона Cron, она ведет себя не...

RSS подписка

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

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


Статистика


Лучшие дц форекс. Рейтинг брокеров форекс www.obrokerah.ru.

Внимание!


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

 

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

База Rarrugas (1, 2)

База Balas

База YellowRaven

База Yurons

База Lesnik757

База Shandor

База Sirrichar

База Anatolean

База Аrmagedec

База SorokinRed

База Deadelf79

База Fadk

 

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

 

База Tairesh

База Ivnglkv

База Kolyag87

База Andyk101

База Garik456456

База Harpokrat

База SalexIzyh

База Duwaz

 

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

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