QT_放大与缩小按钮

头文件: 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();
}
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现Qt按钮实现图片的放大缩小,你可以使用QLabel控件和QPixmap。下面是一个简单的示例代码,演示如何使用QLabel和QPixmap实现图片的放大缩小: ``` #include <QtWidgets> class ImageWidget : public QWidget { public: ImageWidget(QWidget *parent = nullptr) : QWidget(parent) { QVBoxLayout *layout = new QVBoxLayout(this); QLabel *imageLabel = new QLabel; layout->addWidget(imageLabel); QPixmap image(":/images/image.png"); imageLabel->setPixmap(image); QPushButton *zoomInButton = new QPushButton(tr("Zoom In")); layout->addWidget(zoomInButton); QPushButton *zoomOutButton = new QPushButton(tr("Zoom Out")); layout->addWidget(zoomOutButton); connect(zoomInButton, &QPushButton::clicked, this, &ImageWidget::zoomIn); connect(zoomOutButton, &QPushButton::clicked, this, &ImageWidget::zoomOut); zoomLevel = 1.0; } public slots: void zoomIn() { zoomLevel *= 1.2; updateImage(); } void zoomOut() { zoomLevel /= 1.2; updateImage(); } private: void updateImage() { QPixmap image(":/images/image.png"); QSize size = image.size() * zoomLevel; image = image.scaled(size, Qt::KeepAspectRatio); QLabel *imageLabel = findChild<QLabel *>(); imageLabel->setPixmap(image); } qreal zoomLevel; }; int main(int argc, char *argv[]) { QApplication app(argc, argv); ImageWidget widget; widget.show(); return app.exec(); } ``` 在这个示例中,我们创建了一个ImageWidget类,它包含一个QLabel控件和两个QPushButton控件,以实现放大缩小功能。我们用QPixmap加载一张图片,并在QLabel中显示它。当放大缩小时,我们使用QPixmap的scaled()函数来重新调整图片的大小,并将其设置为QLabel的新Pixmap。我们使用一个变量zoomLevel来跟踪当前的缩放级别,并在zoomIn()和zoomOut()函数中更新它。在updateImage()函数中,我们使用findChild<QLabel *>()来查找QLabel控件,并将新的Pixmap设置为它的图像。 希望这个示例能帮助你实现你的Qt按钮实现图片的放大缩小

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值