QT_放大与缩小按钮

时间:2025-04-27 07:10:28
#include ""
#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();
}

#include <QtGui/QApplication>
#include ""
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    PaintTest w;
    w.resize(400,400);
    w.show();
    return a.exec();
}