关于成员函数参数的传递
在《精通QT4编程》书中关于事件处理章节中有如下代码:
void DrawArea::resizeEvent(QResizeEvent *event)
{
if (width() > image.width() || height() > image.height()) {
int newWidth = qMax(width() 128, image.width());
int newHeight = qMax(height() 128, image.height());
resizeImage(&image, QSize(newWidth, newHeight));
update();
}
void DrawArea::resizeImage(QImage *image, const QSize &newSize)
{
if (image->size() == newSize)
return;
QImage newImage(newSize, QImage::Format_RGB32);
newImage.fill(qRgb(255, 255, 255));
QPainter painter(&newImage);
painter.drawImage(QPoint(0, 0), *image);
*image = newImage;
}
想问的是既然void resizeEvent()和void resizeImage()是类DrawArea类的成员函数,为什么在resizeImage()中数据成员Qimage image要以指针的形式传递,成员函数不是可以直接操作数据成员吗?
头文件如下:
#ifndef _DRAWAREA_H
#define _DRAWAREA_H
#include <QColor>
#include <QImage>
#include <QPoint>
#include <QWidget>
class DrawArea : public QWidget
{
Q_OBJECT
public:
DrawArea(QWidget *parent = 0);
bool isModified() const { return modified; }
void clearImage();
protected:
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
void paintEvent(QPaintEvent *event);
void resizeEvent(QResizeEvent *event);
private:
void drawLineTo(const QPoint &endPoint);
void resizeImage(QImage *image, const QSize &newSize);
bool modified;
bool scribbling;
int myPenWidth;
QColor myPenColor;
QImage image;
QPoint lastPoint;
};
#endif