头文件: painttest.h
#ifndef PAINTTEST_H
#define PAINTTEST_H
#include <QtGui/QWidget>
#include <QPushButton>
class PaintTest : public QWidget
{
Q_OBJECT
private:
QPixmap pix;
QPoint lastPoint;
QPoint endPoint;
int scale;
QPushButton *pushBtn;
QPushButton *pushBtn1;
public:
PaintTest(QWidget *parent = 0);
~PaintTest();
protected:
void paintEvent(QPaintEvent *);
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
private slots:
void zoomIn();
void zoomOut();
};
#endif // PAINTTEST_H
painttest.cpp
#include "painttest.h"#include <QPainter>
#include <QPixmap>
#include <QDebug>
#include <QMouseEvent>
#include <QPushButton>
PaintTest::PaintTest(QWidget *parent)
: QWidget(parent)
{
resize(600,500); //窗口大小设置为600*500
pix=QPixmap(200,200);
pix.fill(Qt::green);
scale =1; //设置初始放大倍数为1,即不放大
pushBtn = new QPushButton(this); //新建按钮对象
pushBtn->setText(tr("zoomIn")); //设置按钮显示文本
pushBtn->move(200,150); //设置按钮放置位置
connect(pushBtn,SIGNAL(clicked()),this,SLOT(zoomIn())); //对按钮的单击事件和其槽函数进行关联
pushBtn1 = new QPushButton(this); //新建按钮对象
pushBtn1->setText(tr("zoomOut")); //设置按钮显示文本
pushBtn1->move(300,150); //设置按钮放置位置
connect(pushBtn1,SIGNAL(clicked()),this,SLOT(zoomOut())); //对按钮的单击事件和其槽函数进行关联
}
PaintTest::~PaintTest()
{
}
void PaintTest::mousePressEvent(QMouseEvent *event)
{
//qDebug() << event->pos();
if(event->button()==Qt::LeftButton) //鼠标左键按下
lastPoint = event->pos();
}
void PaintTest::mouseMoveEvent(QMouseEvent *event)
{
if(event->buttons()&Qt::LeftButton) //鼠标左键按下的同时移动鼠标
{
endPoint = event->pos();
update();
}
}
void PaintTest::mouseReleaseEvent(QMouseEvent *event)
{
if(event->button() == Qt::LeftButton) //鼠标左键释放
{
endPoint = event->pos();
update();
}
}
void PaintTest::paintEvent(QPaintEvent *)
{
QPainter pp(&pix);
pp.drawLine(lastPoint,endPoint);
lastPoint = endPoint; //让前一个坐标值等于后一个坐标值,这样就能实现画出连续的线
QPainter painter(this);
painter.scale(scale,scale); //进行放大操作
painter.drawPixmap(0,0,pix);
}
void PaintTest::zoomIn() //按钮单击事件的槽函数
{
scale *=2;
update();
}
void PaintTest::zoomOut() //按钮单击事件的槽函数
{
scale *=0.5;
update();
}
mian.cpp
#include <QtGui/QApplication>#include "painttest.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
PaintTest w;
w.resize(400,400);
w.show();
return a.exec();
}