我有一个列表视图,该列表视图有项目。对于每个项目,我使用setItemDelegate并覆盖委托的paint方法。问题是,在每个项目中,我写了一些文本,当文本非常长时,没有足够的空间。
在paint事件中如何调整项目的大小?因为我可以从paint事件中获取绘制文本的边界框。
提前感谢。
在paint事件中如何调整项目的大小?因为我可以从paint事件中获取绘制文本的边界框。
提前感谢。
paint
方法时,列表视图已经被布局,并且你作为参数接收到的QPainter
可能具有与大小提示相同的绘图表面,或者至少具有变换和裁剪矩形以尊重大小提示。QAbstractItemDelegate::sizeHint
方法中计算文本大小(使用QFontMetrics
),并返回适当的大小提示。为了更好的性能,请缓存你的结果。你需要实现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)
}