Хочу заметить, что для того, чтобы что-то читать или смотреть надо зарегистрироваться. Чтобы качать 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'е всегда известен размер шрифта, который используется в этом виджете, даже если шрифт меняется.