如上图,QListView中item内容随着其宽度的增加而逐渐显示完全。
Qt中实现文本内容的省略显示一般是利用QFontMetrics中elidedText函数实现,
QString QFontMetrics::elidedText(const QString &text, Qt::TextElideMode mode, int width, int flags = 0) const
但是在具体实现时需要输入指定的文本显示宽度,只有超过这个宽度才可以省略显示部分内容,并不能根据控件宽度的变化改变显示长度。
QStandardItem本身也没有提供类似的功能,因此需要为QStandardItem修改QStyledItemDelegate实现自定义Item,在其paint函数中为elidedText提供一可变宽度。具体实现见
QListView实现自定义Item_—片槐树叶的博客-CSDN博客
在对其paint函数重写时,对于其中文本显示内容添加以下代码即可实现文本内容的动态显示:
itemData.content =
item_content_fm.elidedText(itemData.content, Qt::ElideRight,
rect.width() - 70, Qt::TextSingleLine);
painter->drawText(mail_content_rect, itemData.content);