Название: Rotated Label Отправлено: kirill от Сентябрь 07, 2009, 09:20 Компонента RotatedLabel моего авторства.
Код простейший, может кому понадобится, или может кто улучшит и выложит, с антиалиасом у меня не получилось. Название: Re: Rotated Label Отправлено: SABROG от Сентябрь 09, 2009, 12:29 с антиалиасом у меня не получилось. Имхо вполне ощутимая разница (http://img190.imageshack.us/img190/1825/antialias.png) Игра с флагами QPainter::TextAntialiasing, QPainter::SmoothPixmapTransform, QPainter::Antialiasing вообще ничего не дала. А вот font.setStyleStrategy(QFont::PreferAntialias); влияет. Именно этот флаг использует QtCreator в своем редакторе кода. Название: Re: Rotated Label Отправлено: kirill от Сентябрь 09, 2009, 12:37 Игра с флагами QPainter::TextAntialiasing, QPainter::SmoothPixmapTransform, QPainter::Antialiasing вообще ничего не дала. А вот font.setStyleStrategy(QFont::PreferAntialias); влияет. Именно этот флаг использует QtCreator в своем редакторе кода. Разница то есть, но все равно сглаживание далеко от идеального. Название: Re: Rotated Label Отправлено: SABROG от Сентябрь 09, 2009, 12:56 Либо я слепой, либо монитор плохой. Еще поигрался с флагами QFont::PreferQuality, QFont::OpenGLCompatible, QPainter::HighQualityAntialiasing
Ну не вижу разницы никакой. Название: Re: Rotated Label Отправлено: Igors от Сентябрь 09, 2009, 13:08 Разница то есть, но все равно сглаживание далеко от идеального. Чтобы гладить - нужно больше данных. Стандартный подход - в буфере создать текст/изображение в масштабе 4x4 (да, в 16 раз больше) и затем его аккуратно уменьшить (самое простое 1 выходной пиксель = среднее значение матрицы 4x4). Делает ли это Qt - не знаю, но похоже что нет (было бы достаточно много написано). А иначе - ну можно как-то тем же бикубиком подгладить, но "квачества" не получить.Название: Re: Rotated Label Отправлено: SABROG от Сентябрь 09, 2009, 13:33 В общем исходные данные такие:
Шрифт: Tahoma, 8, 45° Открыл Excel. Вписал текст в "Эффектах" рабочего стола сначала выбрал сглаживание шрифтов "Обычное", затем "ClearType". Потом отключил сглаживание вообще и посмотрел на результат Qt. Получилось такое: (http://img38.imageshack.us/img38/7301/antialias2.png) Если сравнивать буквы "ro", в Qt оно хотябы просматривается. Скорее всего разница алгоритмов Qt и Excel при повороте текста. При этом флаг QPainter::SmoothPixmapTransform не был выставлен. Название: Re: Rotated Label Отправлено: m_ax от Декабрь 09, 2009, 21:50 Вечер добрый, господа))
Заинтересовал выш виджеет RotatedLabel, поскольку именно такой крендель нужен в одном проекте... Выкладываю то что получилось у меня)) Замечу, что проблемы с сглаживанием шрифта полностью отсутствуют, а также, что не маловажно, можно использовать html, как в оригинальном QLabel)) Lf? xnj yt vj;tn yt hfljdfnm)) Snapshot и исходники прилогаются)) Название: Re: Rotated Label Отправлено: m_ax от Декабрь 09, 2009, 23:28 Так, нашлась одна бага :(
Подправлена. 8) Название: Re: Rotated Label Отправлено: SABROG от Декабрь 10, 2009, 01:02 Интересный подход. В качестве девайса отрисовки виджета используется QPixmap:
Код
А сам QPixmap после любых манипуляций уже отрисовывается в любом другом месте. Подход хорош тем, что весь функционал QLabel остается. Название: Re: Rotated Label Отправлено: vanessa от Февраль 08, 2010, 16:38 А как его добавить в QT Designer ?
Название: Re: Rotated Label Отправлено: BRE от Февраль 08, 2010, 17:13 А как его добавить в QT Designer ? Посмотри в designer на Promote to... (Преобразовать в...)Название: Re: Rotated Label Отправлено: vanessa от Февраль 08, 2010, 18:31 Я тут сделал его "по-правильному" заодно и научился делать компоненты для дизайнера.
Название: Re: Rotated Label Отправлено: vanessa от Февраль 08, 2010, 21:40 Тестировал я эту вещь.
1. пришлось переделать конструктор для класса RotatedLabel 2. обнаружил что при изменении шрифта эти изменения не отображаются на форма, они становятся видны только при переоткрытии формы. патч к архиву - во вложении что б еще хотелось: чтоб палитра виджета была как у родителя. установка в конструкторе _label.setPalette(parent->palette()); что-то так вот сходу не помогла отрисовать его с палитрой родителя. или у родителя палитра изменилась уже после создания виджета Название: Re: Rotated Label Отправлено: lighting от Октябрь 03, 2011, 17:03 в ходе использования выяснилось что инициализировать пустой строкой "" нежелательно - тогда некорректно возвращаются width() и height(), они устанавливаются в одно значение и после уже не меняются даже если менять текст и вызывать update и adjustsize. В качестве временного решения инициализирую их пробелом " " тогда все ок.
|