Chinaunix首页 | 论坛 | 博客
  • 博客访问: 400238
  • 博文数量: 158
  • 博客积分: 1227
  • 博客等级: 少尉
  • 技术积分: 946
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-20 16:19
文章分类
文章存档

2016年(1)

2015年(1)

2012年(107)

2011年(49)

分类:

2011-05-31 10:35:22

请转载的朋友注明出处:http://blog.chinaunix.net/space.php?uid=8210028
 
一.绘图事件:
 示例:
1        void ImageWidget::paintEvent(QPaintEvent *)
2 {
3 QPainter painter(this);
4                                       if(angle)  //const int angle=90
5 {
6 QPointF center(width()/2.0 ,height()/2.0);
7 painter.translate(center);
8 painter.rotate(angle);
9 painter.translate(-center);
10 }
11 if(bFit)
12 {QPixmap fitpixmap=pixmap.scaled(width(),height(),Qt::KeepAspectRatio);
13 painter.drawPixmap(0,0,fitpixmap);
14 }
15 else
16 painter.drawPixmap(0,0,pixmap);
17 }
有人疑惑:
当angle为90不变而只改变width()和height()的值时,我发觉图片pixmap在随之移动(第16句),这意味着坐标系的原点(0,0)的位置在移动,我感到不理解,因为按理说当保持angle恒定为90时,坐标系的移动到center点后,我想既然angle为恒定值,比如这里为90,不再改变,那么以后再次调用这句painter.rotate(angle);时,应该不会执行了,相当于没有执行这句,又回移到-center点处,也就是说坐标系实际上还在原来位置,未发生任何位移,可是图片怎么会移动呢?
我的答案:
  每次画图都跟前一次没有关系,她在画完后会清除掉前一次的,这个例子里是重新从0度旋转到了90位置,重新旋转后再重新绘图,所以产生平移
 
二.中文显示乱码:
   在程序中使用汉字时,要把汉字用tr(" ");包起来,这样可以使用翻译工具进行翻译,也可以在main.cpp中添加以下这几句,添加位置一定在QApplication app(argc, argv);之后,在其他语句之前。如果用翻译工具生成qm文件,需要安装翻译器,翻译器的添加也是放在这一位置,否则没有效果。
   QTextCodec *codec = QTextCodec::codecForName("GBK");
    QTextCodec::setCodecForCStrings(codec);
    QTextCodec::setCodecForLocale(codec);
    QTextCodec::setCodecForTr(codec);

阅读(436) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~