• 8109阅读
  • 7回复

Delegate的 paint 同一行内容不一致。。。help [复制链接]

上一主题 下一主题
离线抠涕
 
只看楼主 倒序阅读 楼主  发表于: 2011-01-17
。。。图太多,搞混了, 重新传了图片

我想在paint里每次绘制图片的时候把图片随机旋转一下。
如果最后一行只有一半,然后拉滚动条的时候,刷新就出现问题。。。
代码和效果图如下:

  1. void GridDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
  2. {
  3.     MediaType m = index.data(Qt::DisplayRole).value<MediaType>();
  4.     if (m.type == MediaType::Image) {
  5.         QRect rect = option.rect;
  6. //        qDebug() << rect;
  7.         QTransform transform;
  8.         transform.rotate(qrand());
  9.         m.image = m.image.transformed(transform, Qt::SmoothTransformation);
  10.         painter->drawImage(rect, m.image);
  11.     }
  12. }





区域1,2 属于tableview里的同一行。
滚动之后区域1跟区域2里是的图片不一样……
区域1以上,原来可视的区域貌似都没刷新,区域2刷新了……

如果把view设置成按像素滚动就更加惨不忍睹了……
各位告诉我为什么同一行的两个区域为什么没有一起更新?
谢谢。。。
[ 此帖被抠涕在2011-01-17 11:55重新编辑 ]
离线抠涕
只看该作者 1楼 发表于: 2011-01-17
为什么啊为什么……
[ 此帖被抠涕在2011-01-17 11:56重新编辑 ]
离线抠涕
只看该作者 2楼 发表于: 2011-01-17
为了提高性能, 可见区域不进行重绘么 =。=

delegate 又不能 setDirtyRegion() ……
离线kimtaikee

只看该作者 3楼 发表于: 2011-01-17
你在处理scrollbar 事件的时候用 viewport()->update() 一下试试看

离线抠涕
只看该作者 4楼 发表于: 2011-01-17
可以了。多谢 kimtaikee~

不知道这样性能损失大不大~。
离线tqqqw

只看该作者 5楼 发表于: 2011-01-17
沙发被楼主抢了
离线kimtaikee

只看该作者 6楼 发表于: 2011-01-17
回 4楼(抠涕) 的帖子
你可以判断Scollbar的位置来进行刷新,而不是scollbar的值一有改变就刷新

离线蠢蠢欲懂
只看该作者 7楼 发表于: 2012-05-04
我在Tree一个叶子节点中 ,用drawText(),画了一个字符串,紧跟在字符串的后面drawText了字符串的长度,我用delegate编辑这个字符串时,字符串的内容显示在editor中,可是为什么 画出的字符串长度也没有了呢?
快速回复
限100 字节
 
上一个 下一个