请转载的朋友注明出处: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);
阅读(761) | 评论(0) | 转发(0) |