• 5922阅读
  • 4回复

[提问]QPainter draw 运行了,QWidget 中怎么不显示呢? [复制链接]

上一主题 下一主题
离线泛泛之辈
 

只看楼主 倒序阅读 楼主  发表于: 2014-09-25
临摹了 examples 中的 Basic Drawing。在 下面的paintEvent的循环 中,painter 的 draw 函数都运行了,可实际只显示了两三个图形。为什么啊?


void DrawArea::paintEvent(QPaintEvent *event){    
         QPainter painter(this);    
         painter.setPen(pen);    
         painter.setBrush( brush);    
         painter.save();    
         for(int x=0; x<width(); x+=100)      
                  for(int y=0; y<height(); y+=100){          
                           painter.translate(x,y);            
                           switch(shape){                                                  
                           case Line:                
                                   painter.drawLine(rect.bottomLeft(), rect.topRight());                break;          
                           case Polygon:                
                                   painter.drawPolygon(points,point_count);                break;             .
.                         ....            
                 }    
}    
painter.restore();}




离线dbzhang800

只看该作者 1楼 发表于: 2014-09-26
你的for有问题吧,感觉你的意思应该是每次平移100,而不是你现在的每次多平移100
4条评分好评度+1贡献值+1金钱+1威望+1
泛泛之辈 好评度 +1 - 2014-09-26
泛泛之辈 贡献值 +1 - 2014-09-26
泛泛之辈 威望 +1 - 2014-09-26
泛泛之辈 金钱 +1 - 2014-09-26
离线roywillow

只看该作者 2楼 发表于: 2014-09-26
LS也一下子点醒了我
translate是会“积累”之前的变换的
可以直接用translate(100, 100)
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线泛泛之辈

只看该作者 3楼 发表于: 2014-09-26
回 dbzhang800 的帖子
dbzhang800:你的for有问题吧,感觉你的意思应该是每次平移100,而不是你现在的每次多平移100 (2014-09-26 08:39) 

是这个原因,我只是看了例子中的代码,以为translate 是从原点开始移动,原来它是从上次位置开始移动的。谢谢了!
离线泛泛之辈

只看该作者 4楼 发表于: 2014-09-26
回 roywillow 的帖子
roywillow:LS也一下子点醒了我
translate是会“积累”之前的变换的
可以直接用translate(100, 100) (2014-09-26 08:55) 

谢谢参与啊
快速回复
限100 字节
 
上一个 下一个