Название: Отрисовка текста посредством QFont - особенность. Отправлено: jasf от Октябрь 31, 2009, 02:51 Здравствуйте. Посоветуйте, как разобраться вот с такой проблемой (скрин).
Проблема в следующем. Вот я отрисовываю itemсы сверху вниз. Но если я изменяю yOffset начала отрисовки списка на негативные значения, получается, к примеру, часть строки первого itemа должна быть за пределом видимости виджета. Но нет :-), Qt как бы ровняет буквы по верхнему краю и не даёт тексту уехать за пределы картинки. Шрифт создаётся и используется так: QFont font; font.setPixelSize(15); ... painter.setFont(font); Как отключить данную фичу? спасибо :) P.S. извиняюсь за мой английский :) Название: Re: Отрисовка текста посредством QFont - особенность. Отправлено: spectre71 от Октябрь 31, 2009, 11:26 Нет такого.
Сделай и выложи тестовый проект. Название: Re: Отрисовка текста посредством QFont - особенность. Отправлено: jasf от Октябрь 31, 2009, 11:35 Ось - Windows 7. Qt Сборка 4.6beta1.. попробывал менять флаги шрифта - не помогает. видимо дело в настройках виджета.
список можно двигать мышкой вверх/вниз. Название: Re: Отрисовка текста посредством QFont - особенность. Отправлено: spectre71 от Октябрь 31, 2009, 11:50 Ось - Windows 7. Qt Сборка 4.6beta1.. попробывал менять флаги шрифта - не помогает. видимо дело в настройках виджета. список можно двигать мышкой вверх/вниз. Не собирается ! release/treeview.o:treeview.cpp::-1: error: undefined reference to `getBaselineOffset(QFontMetrics*, int) Название: Re: Отрисовка текста посредством QFont - особенность. Отправлено: jasf от Октябрь 31, 2009, 11:51 да есть эта функция в defs.cpp.. может что напортачил при экспорте *PARDON*
Название: Re: Отрисовка текста посредством QFont - особенность. Отправлено: spectre71 от Октябрь 31, 2009, 11:57 да есть эта функция в defs.cpp.. может что напортачил при экспорте *PARDON* Надо было проверить прежде чем выкладывать. Ты не добавил defs.cpp в проекте!Код: int getBaselineOffset( QFontMetrics* metrics, int lineHeight ) Все нормально смещается ! Название: Re: Отрисовка текста посредством QFont - особенность. Отправлено: jasf от Октябрь 31, 2009, 14:10 Ну нет же :)
Моя проблема заключается отнюдь не в baseline смещении. Проблема в смещений каждой отдельновзятой буквы при попытке отрисовки текста за пределы видимости окна. т.е. у меня есть widget, отресайзенный на всё окно. т.е. координата [0,0] виджета совпадает с координатой [0,0] окна. есть QFont с высотой (height) 14 пикселей. painter.drawText(10,13,QString("first_item")); - соответствует первой части прикреплённого изображения painter.drawText(10,9,QString("first_item")); - соответствует второй части.. painter.drawText(10,3,QString("first_item")); - третья часть... тогда, как я ожидаю поведения, как на нижней полоске изображения. Название: Re: Отрисовка текста посредством QFont - особенность. Отправлено: spectre71 от Октябрь 31, 2009, 14:34 Все нормально!
Код: void CTreeView::paintEvent(QPaintEvent *event) { Название: Re: Отрисовка текста посредством QFont - особенность. Отправлено: jasf от Октябрь 31, 2009, 14:44 Спасибо! разобрался. фича в QPainter::setOpacity(не1.0); если установлено opacity - эффект виден на изображениях.
Название: Re: Отрисовка текста посредством QFont - особенность. Отправлено: spectre71 от Октябрь 31, 2009, 15:05 Спасибо! разобрался. фича в QPainter::setOpacity(не1.0); если установлено opacity - эффект виден на изображениях. Нет. Так тоже все нормально Код: void CTreeView::paintEvent(QPaintEvent *event) { Название: Re: Отрисовка текста посредством QFont - особенность. Отправлено: jasf от Октябрь 31, 2009, 16:44 void CTreeView::paintEvent(QPaintEvent *event)
{ if(!topItem_)return; QPainter painter1(this); painter1.setOpacity(0.5); painter1.drawText(10,13,QString("first_item")); painter1.drawText(110,9,QString("first_item")); painter1.drawText(210,3,QString("first_item")); return; ... } и void CTreeView::paintEvent(QPaintEvent *event) { if(!topItem_)return; QPainter painter1(this); //painter1.setOpacity(0.5); painter1.drawText(10,13,QString("first_item")); painter1.drawText(110,9,QString("first_item")); painter1.drawText(210,3,QString("first_item")); return; ... } соответственно. P.S. видимо баг.. или фича. не совсем понятно. может потому, что Qt 4.6 beta1. |