ふれめも

備忘録

QStyledItemDelegateのsizeHintをアイテムごとに変える

ツイッタークライアントをつくっている
各ツイートの情報をQAbstractListModelでリストに入れて、それをQStyledItemDelegateでQListViewに描画することでタイムラインを表示している
このときにデリゲートのsizeHintでリストの各アイテムの大きさの基準を指定できる

いまやってるやつだとツイートの情報(本文とか名前とか)はウィジェットにいれているわけではなくて、painterで描いている
なので、そのままだと各アイテムのサイズがゼロになってつぶれてしまうので、sizeHintにいい感じの大きさを指定する必要がある

なんだけど、ツイートはそれぞれ本文の長さが違うし、改行だってあるし、要するにアイテムひとつひとつの確保したい大きさが違う
だからsizeHintを全部一律で同じ値にはしたくない
ツイートの長さごとに違う大きさを指定しよう

方法:
いったんlabelをつくって、その中にツイートの本文をいれる
setWordWrapをオンにする
labelの幅を指定し、labelをその指定した幅とlabelのsizeHintの高さでresizeする
labelの高さをdelegateにreturnさせる