我是靠谱客的博主 生动雨,最近开发中收集的这篇文章主要介绍qt通过修改label标签页实现界面的滚轮缩放与拖动,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

网上诸多通过 QGraphicsView 实现 可以响应鼠标事件,绘制选择的点,同时可以进行放大缩小操作

但不妨考虑可以将照片绑定在label标签上,然后通过修改标签的大小和移动标签的位置从而实现滚轮缩放与鼠标拖动,思路有了,上代码。

重写鼠标滚轮函数:

void mainUI::wheelEvent(QWheelEvent *event) {

    int x = QCursor().pos().x();        //获取当前鼠标的位置x
    int y = QCursor().pos().y();        //获取当前鼠标的位置y
    if (is_check == false || (x - init_pos_x >= init_len_W || x - init_pos_x <=0 ) || (y - init_pos_y >= init_len_H || y - init_pos_y <= 0))     //即若此刻鼠标不在label的标签区域内,忽略其缩放功能
        return QWidget::wheelEvent(event);
    QPoint numDegrees;                                     // 定义指针类型参数numDegrees用于获取滚轮转角
    numDegrees = event->angleDelta();                      // 获取滚轮转角
    int step = 0;                                          // 设置中间参数step用于将获取的数值转换成整数型
    if (!numDegrees.isNull())                              // 判断滚轮是否转动
    {
        step = numDegrees.y();                             // 将滚轮转动数值传给中间参数step
    }
    event->accept();                                       // 获取事件
    int currentWidth = ui->label->width();                  // 获取当前图像的宽
    int currentHeight = ui->label->height();                // 获取当前图像的高
    currentWidth += step;                                  // 对当前图像的高累加
    currentHeight += step;                                 // 对当前图像的宽累加
    if (step > 0)                                          // 判断图像是放大还是缩小
    {
        QString imgsize = QString::fromLocal8Bit("图像放大,尺寸为:%1 * %2")
                .arg(currentWidth).arg(currentHeight);
        qDebug() << imgsize;                               // 打印放大后的图像尺寸
    } else {
        QString imgsize = QString::fromLocal8Bit("图像缩小,尺寸为:%1 * %2")
                .arg(currentWidth).arg(currentHeight);
        qDebug() << imgsize;                                // 打印缩小后的图像尺寸
    }
    ui->label->resize(currentWidth, currentHeight);          // 通过更新图像显示控件的大小来更新图像大小

缩放实现后接下来鼠标拖动,那么不妨这样考虑,整个事件可以分为鼠标按下,鼠标移动和鼠标释放三种状态,对其三种状态函数全部重写即可。

鼠标按下函数:记录当前坐标即可。

void mainUI::mousePressEvent(QMouseEvent *event) {      //重写mousePressEvent函数

    if (is_check == false) return QWidget::mousePressEvent(event);      //判断是否勾选启用图像缩放
    //记录初始坐标
    OldPos = event->pos();
    Pressed = true;

}

鼠标移动函数:对其坐标x和y分别进行矢量加减就OK。然后根据新坐标移动label标签。

void mainUI::mouseMoveEvent(QMouseEvent *event) {           //重写鼠标移动函数

    if (!Pressed)
        return QWidget::mouseMoveEvent(event);
    this->setCursor(Qt::SizeAllCursor);
    QPoint pos = event->pos();
    int xPtInterval = pos.x() - OldPos.x();
    int yPtInterval = pos.y() - OldPos.y();

    XPtInterval += xPtInterval;
    YPtInterval += yPtInterval;

    OldPos = pos;

    ui->label->setGeometry(XPtInterval,YPtInterval,ui->label->width(),ui->label->height());

    update();

}

 鼠标释放函数:停止响应

void mainUI::mouseReleaseEvent(QMouseEvent *event) {            //重写鼠标释放函数

    Pressed = false;

    setCursor(Qt::ArrowCursor);

}

对应变量头文件中直接定义就OK,不再贴代码了。

最后

以上就是生动雨为你收集整理的qt通过修改label标签页实现界面的滚轮缩放与拖动的全部内容,希望文章能够帮你解决qt通过修改label标签页实现界面的滚轮缩放与拖动所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部