

如上图,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_—片槐树叶的博客-优快云博客
在对其paint函数重写时,对于其中文本显示内容添加以下代码即可实现文本内容的动态显示:
itemData.content =
item_content_fm.elidedText(itemData.content, Qt::ElideRight,
rect.width() - 70, Qt::TextSingleLine);
painter->drawText(mail_content_rect, itemData.content);

本文介绍如何在Qt的QListView中实现item内容随着控件宽度变化而动态显示完全。通常使用QFontMetrics的elidedText函数进行文本省略,但此方法需预设显示宽度。通过自定义QStyledItemDelegate并重写paint函数,可以为QStandardItem提供一个可变宽度,使得文本显示能适应控件宽度变化,达到动态显示的效果。
最低0.47元/天 解锁文章
3097

被折叠的 条评论
为什么被折叠?



