Russian Qt Forum
Ноябрь 10, 2024, 22:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: ICS Network - The Place to Learn Advanced Techniques for Developing with Qt  (Прочитано 16218 раз)
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« : Июнь 09, 2009, 00:51 »

Зашел вот на форум crossplatform и увидел тему созданную SABROG про ICS Network и думаю дайка создам аналогичную тему у нас на форуме. Думал создать такую темку ещё с годик назад, но ввиду того что многие форумчане несильны в английском - не решился.

Ну да ладно, это все лирика... Улыбающийся

ICSNetwork - это информационный ресурс компании ICS, предназначены для изучение дополнительный приемов разработки на Qt. Как по мне, этот ресурс имеет ценность для новичков в Qt. В ICSNetwork можно найти вэбкасты, статьи.

И так, вышеперечисленный материал можно найти здесь:

Вэбкасты: ICSNetwork
Статьи: Qt White Papers

ЗЫ: Список статей и вебкастов постоянно обновляется
ЗЗЫ: Замечания и пожелания приветствуются Улыбающийся
« Последнее редактирование: Июнь 09, 2009, 10:22 от pastor » Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #1 : Июнь 09, 2009, 09:52 »

Я бы еще описание добавил - что это такое,  с чем едят ) А то мне ничего не понятно(
Записан
SABROG
Гость
« Ответ #2 : Июнь 10, 2009, 15:43 »

Хочу заметить, что для того, чтобы что-то читать или смотреть надо зарегистрироваться. Чтобы качать white papers нужно выделить галочкой нужную тему и нажать на Download, pdf'ка придет на e-mail.

Чем-то напоминает Qt Quarterly. Например интересную штуку почерпнул, как оптимизировать свой paintEvent, если используется QFontMetrics, чтобы определить размер шрифта. Обычно код выглядит подобным образом:

Код
C++ (Qt)
MyWidget::paintEvent( QPaintEvent* evt )
{
QFontMetrics fm( font() );
int textWidth = fm.width( text() );
int textHeight = fm.height();
// compute layout of the widget using textWidth and
// textHeight, then paint
}
 

Идея в том, чтобы объявить переменную этого класса в классе виджета и переопределить setFont.
Код
C++ (Qt)
class MyWidget
{
...
QFontMetrics mFm;
...
};
 

Код
C++ (Qt)
void MyWidget::setFont( const QFont& newFont )
{
mFm = QFontMetrics( newFont );
QWidget::setFont(newFont);
}
 

Код
C++ (Qt)
MyWidget::paintEvent( QPaintEvent* evt )
{
int textWidth = mFm.width( text() );
int textHeight = mFm.height();
// compute layout of the widget using textWidth and
// textHeight, then paint
}
 

Чтобы еще больше оптимизировать объявляем переменные mTextWidth/mTextHeight в классе виджета...:

Код
C++ (Qt)
void MyWidget::computeTextWidthHeight()
{
mTextWidth = mFm.width( text() );
mTextHeight = mFm.height();
}
 

Код
C++ (Qt)
void MyWidget::setText( const QString& newText )
{
QWidget::setText( newText );
computeTextWidthHeight()
}
 
void MyWidget::setFont( const QFont& newFont )
{
mFm = QFontMetrics( newFont );
QWidget::setFont( newFont );
computeTextWidthHeight();
}
 

Теперь в paintEvent'е всегда известен размер шрифта, который используется в этом виджете, даже если шрифт меняется.
« Последнее редактирование: Июнь 10, 2009, 15:58 от SABROG » Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #3 : Сентябрь 28, 2010, 11:23 »

Можно еще так:
Код
C++ (Qt)
MyWidget::paintEvent( QPaintEvent* evt )
{
   if (old_font_ != font())
   {
       QFontMetrics fm( font() );
       text_width_ = fm.width( text() );
       text_height_ = fm.height();
       old_font_ = font();
   }
 
   // paint here
}
 
Записан

Гугль в помощь
twp
Гость
« Ответ #4 : Декабрь 10, 2010, 11:51 »

Можно, но не нужно - хранить одну переменную класса ради такого фокуса? хм
Записан
Akon
Гость
« Ответ #5 : Февраль 13, 2012, 09:57 »

Цитировать
Например интересную штуку почерпнул, как оптимизировать свой paintEvent, если используется QFontMetrics, чтобы определить размер шрифта. Обычно код выглядит подобным образом:
Так это элементарное кэширование, и как-то хоть немного сильно думать для этого не нужно.

Переопределение setFont() (в общем случае перекрытие невиртуальных методов) вообще потенциально бажная идея:
Код:
QWidget* widget = new MyWidgetWithSetFontOverriding;
widget->setFont(...);   // вот тут нихрена не MyWidgetWithSetFontOverriding::setFont.
Правильно - реагировать на событие fontChanged.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.237 секунд. Запросов: 19.