用QT创建一个窗口,在窗口中添加一个标签,初始大小为100X100像素,标签内显示一张图片;实现鼠标滚轮上滚下滚时以图片中心为固定点,图片变大变小的功能,,当鼠标左键按下时,标签恢复初始大小
时间: 2024-05-11 18:20:28 浏览: 79
可以按照以下步骤实现:
1. 创建一个Qt窗口应用程序工程,并在主窗口中添加一个标签控件。
2. 在标签控件中设置一张初始图片,可以使用QPixmap类来加载图片。
3. 为标签控件添加鼠标滚轮事件和鼠标左键按下事件的处理函数。在鼠标滚轮事件的处理函数中,可以使用QTransform类来实现图片的缩放功能;在鼠标左键按下事件的处理函数中,可以将标签控件的大小恢复到初始大小。
下面是一个示例代码,可以参考一下:
mainwindow.h文件:
```c++
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QLabel>
#include <QPixmap>
#include <QTransform>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
protected:
void wheelEvent(QWheelEvent *event) override;
void mousePressEvent(QMouseEvent *event) override;
private:
QLabel *m_label; // 标签控件
QPixmap m_pixmap; // 图片
QSize m_initSize; // 初始大小
};
#endif // MAINWINDOW_H
```
mainwindow.cpp文件:
```c++
#include "mainwindow.h"
#include <QWheelEvent>
#include <QMouseEvent>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
// 创建标签控件
m_label = new QLabel(this);
m_label->setFixedSize(100, 100);
m_label->setAlignment(Qt::AlignCenter);
// 加载图片
m_pixmap.load(":/images/image.png");
m_label->setPixmap(m_pixmap);
// 记录初始大小
m_initSize = m_label->size();
}
MainWindow::~MainWindow()
{
}
void MainWindow::wheelEvent(QWheelEvent *event)
{
// 计算缩放比例
double factor = 1.0 + event->delta() / 1200.0;
// 当前标签控件的中心点
QPoint center = m_label->rect().center();
// 构造缩放变换
QTransform transform;
transform.translate(center.x(), center.y());
transform.scale(factor, factor);
transform.translate(-center.x(), -center.y());
// 应用缩放变换
m_label->setPixmap(m_pixmap.transformed(transform));
}
void MainWindow::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton)
{
// 恢复初始大小
m_label->setFixedSize(m_initSize);
}
}
```
在程序中,我们首先在构造函数中创建了一个标签控件,并设置了初始大小和对齐方式,然后使用QPixmap类加载了一张图片,并设置为标签控件的内容。在记录了初始大小后,我们重载了鼠标滚轮事件和鼠标左键按下事件的处理函数。
在鼠标滚轮事件的处理函数中,我们首先计算了缩放比例,然后获取了当前标签控件的中心点,并构造了一个QTransform对象来实现缩放变换。最后,我们使用QPixmap类的transformed函数将原始图片缩放后更新到标签控件中。
在鼠标左键按下事件的处理函数中,我们直接将标签控件的大小恢复到初始大小。
阅读全文