我有一个列表视图。该列表视图有项目。对于每个项目,我使用 setItemDelegate 并覆盖委托的绘制方法。我的想法是,在每个项目中我都在写一些文本,当文本真的很长时,空间就不够了。
如何从绘画事件中调整项目的大小?因为我在绘画事件中得到了绘制文本的边界框。
提前致谢,
你不能。当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)
}