1、实现放大与缩小接口:

//发生缩放
    if(scaling_flag == 1)
    {
        Video->setScaledContents(false);
        //fprintf(stderr,"__________________________%f\n",m_scaling);
         //QImage: out of memory, returning null image
//        QImage* imgScaled = new QImage;
//        *imgScaled=mge.scaled(mge.width()*m_scaling,
//                             mge.height()*m_scaling,
//                             Qt::KeepAspectRatio);
//        mge = *imgScaled;

//解决图片过大,出现内存溢出
        mge = mge.scaled(mge.width()*m_scaling,
                             mge.height()*m_scaling,
                             Qt::KeepAspectRatio);
        //fprintf(stderr,"----------------------------------%d,%d\n",mge.width(),mge.widthMM());
        //解决图像中心缩放
        if(mge.width()>Video->width())
        {
            mge = mge.copy((mge.width()-Video->width())/2,(mge.height()-Video->height())/2,
                           Video->width(),Video->height());
        }

}

通过放大与缩小来改变m_scaling的值
void tomato::zoomIn()
{
    if(m_videoDev.fd == -1)
    {
        QMessageBox::warning(this,"放大","摄像头未打开!");
        return;
    }

myTimer.stop();

scaling_flag = 1;
    m_scaling = m_scaling*1.2;
    while(m_scaling > 20)
    {
        m_scaling = 20;
    }

myTimer.start();
}

void tomato::zoomOut()
{
    if(m_videoDev.fd == -1)
    {
        QMessageBox::warning(this,"放大","摄像头未打开!");
        return;
    }

myTimer.stop();

scaling_flag = 1;
    m_scaling = m_scaling/1.2;
    while(m_scaling<0.05)
    {
        m_scaling = 0.05;
    }

myTimer.start();
}

2、重写滚轮事件

// 滚轮事件
void tomato::wheelEvent(QWheelEvent *event)
{
    /*
    //得到鼠标事件的位置
    //当滚动缩略图标时,鼠标位置不正确,导致图像也发生了缩放
    int x = event->x();
    int y = event->y();
    */
    QPoint pos;
    QPoint pos1;
    QPoint pos2;
    pos1 = mapToGlobal(QPoint(0,0));
    pos2 = event->globalPos();
    pos = pos2 - pos1;

/*
    fprintf(stderr,"pos.x() = %d,pos.y() = %d;Video->x() = %d,Video->y() = %d;Video->width() = %d,Video->height() = %d\n"
            ,pos.x(),pos.y(),Video->x(),Video->y(),Video->width(),Video->height());
    */
    //判断鼠标位置是否在图像显示区域
    if (pos.x() > Video->x() && pos.x() < Video->x()+Video->width()
            && pos.y() > Video->y() && pos.y() < Video->y()+Video->height())
    {
        // 当滚轮远离使用者时进行放大,当滚轮向使用者方向旋转时进行缩小
        if(event->delta() > 0)
        {
            zoomIn();
        }
        else
        {
            zoomOut();
        }
    }

}

QT界面,鼠标滚轮实现缩放问题相关推荐

  1. Win10中Pro/E鼠标滚轮不能缩放该怎么办?

    Pro/E安装好后,鼠标滚轮不能缩放模型,该怎么办?问题多发生在win8/win10上,新装了PROE,发现滑动鼠标中键不能放大缩小. 1.打开左下角搜索,搜索"网络设置". 2. ...

  2. winform 以光标指向点为中心 通过鼠标滚轮对图片进行缩放

    最近一个项目需要涉及到图片的全屏显示以及缩放拖动功能,其中缩放实现需要考虑的一点就是为了有更好的用户体验,需要在缩放的时候以光标所处位置为参考点,进行缩放操作,简单来说就是,缩放前后光标在图片上所处的 ...

  3. unity相机脚本 鼠标滚轮控制缩放

    1.创建一个onWhellScroll函数并放在LateUpdate内(LateUpdate是内置函数与Update一样) public class detailCameraHandle : Mono ...

  4. 通过鼠标滚轮实现缩放效果

    using System.Collections; using System.Collections.Generic; using UnityEngine;public class Scroll : ...

  5. unity 鼠标滚轮实现缩放:将摄像机的镜头拉近或者拉远

    using System.Collections; using System.Collections.Generic; using UnityEngine; public class shuBiao ...

  6. Qt编程之通过鼠标滚轮事件缩放QGraphicsView里面的Item

    首先自己subclass QGraphicsView的一个类,叫DiagramView,然后重新实现它的滚轮事件函数,然后发送一个缩放信号: 1 oid DiagramView::wheelEvent ...

  7. C# chart1 添加滚动条的缩放 鼠标滚轮控制缩放

    namespace APP { public partial class Form1 : Form { public Form1() { InitializeComponent(); } privat ...

  8. Proe 5.0鼠标滚轮无法缩放的解决方法

    鼠标中键(也就是滚轮)在软件里起"确认"功能,滚轮上下滑动可以进行缩放,没反应的话解决办法如下: 1.win+i打开设置界面 2.在设备选项中选择鼠标按键,将悬停在·非活动窗口滚动 ...

  9. [笔记] 关于通过鼠标滚轮设置缩放的技巧

    鼠标正向滚动的时候, 拿到的滚动数据是大于 0 的, 反之, 小于 0. Pow 函数在 x 为正数的时候, 返回值是大于 1 的, x 为负数的时候, 返回值是小于 1 的, 可以直接设置这样的一个 ...

最新文章

  1. Dubbo服务暴露原理
  2. c++ 取机器码_吉林c系列防倒灌风帽怎么卖,流线型通风器可定制
  3. oracle11 for download official
  4. ElasticSearch5.5.1插件分类
  5. XGBoost算法概述
  6. 相同的树Python解法
  7. 【DFS + 记忆化递归 + DP】LeetCode 91. Decode Ways
  8. H3C交换机配置STP配置
  9. Anatomy of a Program in Memory
  10. Linux学习笔记5 - Shell编程(类似于Windows下的批处理)
  11. Python翻译Excel文件
  12. 基于单片机的水温控制系统设计
  13. 项目中出现npm WARN locking errno: -4048, npm WARN locking code: ‘EPERM‘, npm WARN locking syscall:
  14. 数据清洗第六章—课后操作题
  15. 编程题 java 密码锁_Java实现 蓝桥杯VIP 算法提高 密码锁
  16. 服务器重装系统踩坑总结
  17. java打印数组的连续非空子集_Apriori算法求数组的非空子集java代码
  18. 武汉理工大学c语言pta选择题答案,武汉理工大学c语言实验及答案.doc
  19. JS复制文本到粘贴板,前端H5移动端点击按钮复制文本到粘贴板。
  20. 在java语言中 ()方法是不可以继承的_Java 语言中,构造方法是不可以继承的。( )_学小易找答案...

热门文章

  1. 【源码阅读】GAT:GRAPH ATTENTION NETWORKS
  2. Python 输入一个整数,将他转换为数字金字塔和 * 金字塔
  3. 转:用迅雷下载Android SDK全系列
  4. 华为KubeEdge在边缘计算的实践
  5. 华为西欧副总裁:华为很快就能推出自研操作系统
  6. 单反相机坏点和噪点测试软件,坏点和噪点测试程序(照片检测工具)
  7. 线上拼团活动方案怎么制作设计?
  8. hc sr501 c语言程序,HC-SR501人体红外感应模块资料汇总(原理图、常见问题、程序等)...
  9. python计算线性回归方程
  10. unity中3D数学相关类、属性、方法、用途总结+超级综合的案例