我有一个列表视图。该列表视图包含项目。对于每个项目,我使用setItemDelegate,并重写委托的paint方法。我认为在每个项目中我都会写一些文本,而当文本很长时,就没有足够的空间了。
如何从paint事件中调整项目的大小?因为我在paint事件中得到了绘制文本的边界框。
提前致谢,
答案 0 :(得分:2)
你做不到。当调用项委托的paint
方法时,列表视图已经布局,并且您作为参数接收的QPainter
可能具有与大小提示大小相同的绘图表面,或者至少具有变换和裁剪rect设置为尊重大小提示。
您必须使用QAbstractItemDelegate::sizeHint
方法计算文本大小(使用QFontMetrics
)并返回适当的大小提示。 Cache your results以获得更好的效果。
答案 1 :(得分:0)
您需要实施sizeHint
方法
QListItemDelegat::QListItemDelegat(): QStyledItemDelegate(0){}
QSize
QListItemDelegat::sizeHint( const QStyleOptionViewItem& option, const DataClass& data ) const
{
const QStyle* style( QApplication::style( ) );
QFont nameFont( option.font );
nameFont.setWeight( QFont::Bold );
const QFontMetrics nameFM( nameFont );
const QString nameStr( data.GetName() );
int nameWidth = nameFM.width(nameStr);
int nameHeight = nameFM.height(nameStr);
return QSize(nameWidth ,nameHeight)
}