使用Qt中的委托更改列表项大小
Varying list item size using delegate in Qt
我有一个列表视图。该列表视图包含项目。对于每个项目,我使用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)
}
相关文章:
- Qt - QVector 和模型视图 - 从列表视图获取自定义类的最佳方法是什么?
- 如何在Qt C++中获取所有可用主题的列表?
- Qt单元测试:指针列表上的QCOMPARE函数
- Qt驱动器下拉列表仅列出USB记忆棒
- Qt JsonObjects和初始值设定项列表 - 比一个级别更深?
- Qt并发错误:数组初始化需要大括号括起来的初始值设定项列表
- Qt/C++ 获取 QBluetoothLocalDevice 列表
- Qt:将 c++ 中的列表连接到 QML 中的列表视图
- Qt 图像列表
- 为什么调用单例类 Qt 消息处理程序成员函数会出现错误:缺少参数列表
- Qt:通过深度复制访问列表中的数据结构是否应该比通过指针访问它慢得多
- 在QT中启动程序时如何创建列表或对象
- 在QT列表中存储DB的查询结果的更好方法
- 获取QT中所有Qpushbutton的列表
- 带有QMediaPlaylist的播放列表在QT中
- Qt:为模板(映射、列表、集合等)构建一个可变迭代器
- 无法在 QML 列表视图中调用 Qt c++ 方法
- QT-如何从const函数附加到本地列表
- 在列表小部件 Qt C++中显示数组内容
- 如何获得类函数名称列表?Qt c++