3

我有一个列表视图。该列表视图有项目。对于每个项目,我使用 setItemDelegate 并覆盖委托的绘制方法。我的想法是,在每个项目中我都在写一些文本,当文本真的很长时,空间就不够了。

如何从绘画事件中调整项目的大小?因为我在绘画事件中得到了绘制文本的边界框。

提前致谢,

4

2 回答 2

2

你不能。当paint调用项目委托的方法时,列表视图已经布置好,QPainter您收到的参数可能有一个与尺寸提示相同大小的绘图表面,或者至少有一个变换和剪切矩形设置为尊重尺寸暗示。

您必须在方法中计算文本大小QAbstractItemDelegate::sizeHint(使用QFontMetrics)并返回适当的大小提示。缓存您的结果以获得更好的性能。

于 2013-07-29T15:57:35.723 回答
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)
}
于 2013-07-29T15:27:04.527 回答