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 に答える