分类: LINUX
2010-04-16 23:44:17
初识QPixmap与QImage
今天写了一下QT两个图像类(QT中与图像相关的类很多)的程序。熟悉一下两者的基本用法以及区别。
环境:
OS:红旗6.02,内核版本:
编辑器:emacs 23
Qt版本:Qt-
说明:源代码包中的make.sh中qmake是绝对路径,因为红旗已安装QT3,直接qmake会调用QT3的编译器,而我不会正确设置PATH,只好出此下策了。
使用方法:
1、编译:正确安装qt后,在工程目录下运行./make.sh即可,如出错,请慢慢找原因。
2、清除:直接支持./clean.sh即可。
程序的代码非常简单,主要就是实现了painEvent方法,再在main函数中调用窗口的show方法,就可以了。下面分析一下代码。
头文件代码:
|
相应的实现文件代码:
#include "imagewidget.h"
CImageWidget::CImageWidget(QWidget *parent)
:QWidget(parent)
{
// set the title
setWindowTitle(tr("a simple widget!"));
resize(640, 480); //设置窗口大小
}
void CImageWidget::paintEvent(QPaintEvent *)
{
QPainter painter(this);
QImage image;
image.load(":/images/bruce.jpg"); //加载
painter.drawImage(0, 0, image, 0, 0, 320, 480);
QPixmap pix;
//下面的两行代码,只取其一即可。
// pix.load(":/images/bruce.jpg");
pix = pix.fromImage(image); //测试从QImage转换到QPixmap
painter.drawPixmap(320, 0, 320, 480, pix);
}
解释其中的几行代码。
1、image.load(":/images/bruce.jpg");
加载工程目录下的images子目录的bruce.jpg文件。注意它的写法。
2、 painter.drawImage(0, 0, image, 0, 0, 320, 480);
drawImage是QPainter的一个方法,这里的意思是将image对象放到窗口的(0,0)位置,亦即左上角,最后两个数字是指定的大小。它的原型如下:
void QPainter::drawImage ( int x, int y, const QImage & image, int sx = 0, int sy = 0, int sw = -1, int sh = -1, flags = Qt::AutoColor )
文档中解释为:
Draws an image at (x, y) by copying a part of image into the paint device. (x, y) specifies the top-left point in the paint device that is to be drawn onto. (sx, sy) specifies the top-left point in image that is to be drawn. The default is (0, 0). (sw, sh) specifies the size of the image that is to be drawn. The default, (0, 0) (and negative) means all the way to the bottom-right of the image.
sx和sy是指图像左上角的坐标,sw和sh是指定了图像的大小,如果都为0或负数,就显示完整个图像。
3、 painter.drawPixmap(320, 0, 320, 480, pix);
drawPixmap也是QPainter的一个方法,它将pix对象放到(320,0)处,大小为(320,480)。它的原型很简单,就不列出来了。
至于这些坐标数据,可以看到我在构造函数是设定了窗口大小为640X480,这样,两张图像恰好位于左右两边。
主函数也很简单:
|
That’s it!
效果图如下,仔细看一下,就可以看到两者的区别了。各位可以改变它们的大小,来观察一下变化。
小弟没有采用Qt Designer,这是经过我几天的考虑,权衡再三,最终下定决心的,而使用emacs同样也是我下了很大决心的——我从寒假在家就开始学习使用emacs,现在emacs正在配置各种插件,目前有点习惯使用它了,等过段时间就写一下总结。
(PS:今天指导老师又催毕业设计进度了)
源代码:
|