リストビューがあります。そのリスト ビューには項目があります。アイテムごとに 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)
}