Qt如何重写QScrollArea的wheelEvent事件以实现图片的缩放功能? 5C

各位大佬.
Hello, My Gods.
我的问题是酱婶儿滴.
This problem is about Qt event.

在QScrollArea中显示图片时,其默认有一个鼠标滚轮控制垂直滚动条滚动的事件。所以当我想重写wheelEvent事件之后,它总是会在滚动条滚到头的时候才实现图像的缩放操作,所以怎样才能控制让滚轮操作只影响图像缩放,不影响垂直滚轮嘞?
下面是wheelEvent的代码.

 private slots:
// Reimplement the wheelEvent() to Achieve Zoom in and Zoom out.      
void wheelEvent(QWheelEvent *e);

/**
 *  @BRIEF Reimplement wheelEvent()
 *  @param QWheelEvent: Event about mouse wheel
 */
void MatchWindowSingle::wheelEvent(QWheelEvent *e)
{
    // If numDegress > 0, then zoom in,
    // else, zoom out.
    // The scale control the picture's size.
    int numDegress = e->delta();    

    // Update ScrollArea 控制图片缩放的各个函数
    if (ui.sa_geoImage->hasFocus()){
        identityScaleFactor(&numDegress, &scaleFactor_MIN_g, &scaleFactor_g);
        updateScrollArea(&geoPic, ui.sa_geoImage, &geoImageLable, &scaleFactor_g);
    }else if (ui.sa_videoImage->hasFocus()){
        identityScaleFactor(&numDegress, &scaleFactor_MIN_v, &scaleFactor_v);
        updateScrollArea(&videoPic, ui.sa_videoImage, &videoImageLable, &scaleFactor_v);
    }
}

3个回答

private slots:
// Reimplement the wheelEvent() to Achieve Zoom in and Zoom out.

void wheelEvent(QWheelEvent *e);

/**

  • @BRIEF Reimplement wheelEvent()
  • @param QWheelEvent: Event about mouse wheel
    */
    void MatchWindowSingle::wheelEvent(QWheelEvent *e)
    {
    // If numDegress > 0, then zoom in,
    // else, zoom out.
    // The scale control the picture's size.
    int numDegress = e->delta();

    // Update ScrollArea 控制图片缩放的各个函数
    if (ui.sa_geoImage->hasFocus()){
    identityScaleFactor(&numDegress, &scaleFactor_MIN_g, &scaleFactor_g);
    updateScrollArea(&geoPic, ui.sa_geoImage, &geoImageLable, &scaleFactor_g);
    }else if (ui.sa_videoImage->hasFocus()){
    identityScaleFactor(&numDegress, &scaleFactor_MIN_v, &scaleFactor_v);
    updateScrollArea(&videoPic, ui.sa_videoImage, &videoImageLable, &scaleFactor_v);
    }
    }

u014430031
hongdaz ...没那么复杂 新建一个C++类,继承QScrollArea 重载wheel事件 然后在new你写的C++类对象
接近 2 年之前 回复
TJX1996
Tonyimo
接近 2 年之前 回复

这边问题解决了 , 你不要用自动生成的QScrollArea.ui 而是自己new 一个QScrollArea 对象出来, 然后重载他的wheel事件就好了

TJX1996
Tonyimo 回复hongdaz: 能麻烦具体给个示例代码吗?不是很明确您的意思,我也是刚接触这块,有些东西不是太懂
接近 2 年之前 回复
TJX1996
Tonyimo 能麻烦具体给个示例代码吗?不是很明确您的意思,我也是刚接触这块,有些东西不是太懂
接近 2 年之前 回复
TJX1996
Tonyimo 新建一个C++类,在弹出的窗口中填写类名CLabel,并选择其父类为QLabel; 然后在这个新类中添加 paintEvent或者mouseMoveEvent 成员方法; 在要用到label控件上右键->提升为... 在弹出的提升对话框中添加CLabel类,选择这个类,点击提升后该label控件就可以响应你自己的paintEvent或者mouseMoveEvent方法。
接近 2 年之前 回复
TJX1996
Tonyimo 回复hongdaz: 是这个意思吗?
接近 2 年之前 回复
u014430031
hongdaz 回复Tonyimo: 就是因为是布局设计的 所以你的重载没有生效 原来的当然就不要了啊 而且我是说控件 对象 你也可以保存原来的页面啊
接近 2 年之前 回复
TJX1996
Tonyimo 谢谢回复~,但是我的QScrollArea是在一个窗体布局里设置的啊,我重新new一个QScrollArea原来的布局岂不是白设计了?
接近 2 年之前 回复

wheelEvent 是virtual protected函数, 应该在protected下重新实现该函数.
protected:
void wheelEvent(QWheelEvent *e)

TJX1996
Tonyimo 这个我试过了啊,改成protected滚动条还是有这个问题
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Qt如何重写QScrollArea的wheelEvent()事件以实现图片随滚轮操作放大缩小?
各位大佬们.rnHello, my god.rnrn这个问题是这样的.rnThis problem is about QT event.rnrnQScrollArea在用QLable进行图片填充后,当图片尺寸过大时,QScrollArea会显示垂直、水平两个滚动条;但现在的遇到的问题是,它默认给鼠标滚轮添加了一个垂直滚动条的滚动事件,滚轮上下滚动时,滚动条也上下滚动。rn于是当我重写wheelEvent事件后,只有当滚动条滚到头的时候,我写的缩放滚动条的事件才会执行,这样感觉很不科学,大家有神马解决办法吗?跪谢.....rnrn贴上wheelEvent()的代码rnrn[code=c]rnprivate slots:rn // Reimplement the wheelEvent() to Achieve Zoom in and Zoom out. rn void wheelEvent(QWheelEvent *e);rnvoid MatchWindowSingle::wheelEvent(QWheelEvent *e)rnrn // If numDegress > 0, then zoom in,rn // else, zoom out.rn // The scale control the picture's size.rn int numDegress = e->delta(); rnrn // Update ScrollArea 下面是执行图片缩放的函数代码rn if (ui.sa_geoImage->hasFocus())rn identityScaleFactor(&numDegress, &scaleFactor_MIN_g, &scaleFactor_g);rn updateScrollArea(&geoPic, ui.sa_geoImage, &geoImageLable, &scaleFactor_g);rn else if (ui.sa_videoImage->hasFocus())rn identityScaleFactor(&numDegress, &scaleFactor_MIN_v, &scaleFactor_v);rn updateScrollArea(&videoPic, ui.sa_videoImage, &videoImageLable, &scaleFactor_v);rn rnrn[/code]
qt实现图片的缩放
需求 需求分析 代码 重写paintEvent 代码分析 重写wheelEventQWheelEvent event 代码分析需求在聊天的时候看到 觉得图片缩放的控件比较有用,于是决定自己实现一个。需求分析在其中的图片转换,背景优化以及悬浮的按钮暂时不做考虑。 1. 图片的缩放 2. 图片的旋转 3. 图片在视图区域展示,在非视图区域看不到 4. 鼠标的滑轮控制方法和缩小1,2可以通
Qt中隐藏滚动条重新实现鼠标滚轮事件wheelEvent
我的需求是实现一系列控件横排排列,隐藏滚动条,然后通过鼠标的滚轮的移动控件的位置。当窗口大小足以容纳所有控件时不响应滚轮事件,窗口缩小时可以通过鼠标的滚轮来把隐藏的控件移到视线中来。如图所示: 最开始用的是QScrollarea,但是总不能实现出我想要的布局,没有能自适应窗口大小,所以采用了一个变通的方法: 通过QListwidget控件来实现,感觉这样操作起来比较方便,而且可以方
Qt重写事件
使用QT写了一个常用的事件消息响应Demo
如何实现缩放功能?
我在PICTURE里面,根据格式内容,动态地画了很多文本,线条实现了打印予缆功能,一切模拟得非常顺利,但现在碰到了缩放问题,怎样解决比较好呢?
QT 缩放功能
QT 缩放功能实现
QT的QScrollArea使用详解
有些时候,我们界面能展示的区域被限定的很小,但是需要展现的控件、内容却很多,在限定大小的区域中无法全部显示。这个时候就需要滚动条了。在Qt中有一个很好的类 QScrollArea。 有两种方式可是实现滚动区域: 第一种直接用 Qt Designer 去设计ui文件: 拖入QScrollArea然后进行布局即可。 第二种是代码实现: QLabel *imageLabel = new Q...
QT 的QScrollArea控件介绍
QScrollArea提供了一个滚动视图到另一个部件。#include "scopewidget.h"#include <QScrollArea>#include<Qlabel> ScopeWidget::ScopeWidget(QWidget *parent) : QWidget(parent){//QHBoxLayout *layout = new QHBoxLa...
图片拖动和缩放功能
NULL 博文链接:https://1002878825-qq-com.iteye.com/blog/1173968
关于图片的缩放功能
我要将一张图片按比例缩小显示,不要用像StretchBlt这种函数,效果实在不怎么样。rn最好给个算法或是给点代码。rn谢谢!rn
一文读懂鼠标滚轮事件(wheelEvent)
最近在用VUE写一个后台管理系统,顶部标签页涉及鼠标滚轮事件,由于每个浏览器对滚轮事件的处理方式不一样,个人对这个又不懂,折腾了很久,参考了大神的代码,也把百度翻烂了,找到了一篇陈旧的博文(其实是主题很土,发布时间未知)。写得非常清楚,解决了我的问题。先看看我标签页的界面: 如果打开的标签超过滚动区域宽度,会显示滚动条,支持鼠标滚轮左右...
QScrollArea的自动滚动功能
将一个QLabel部件,放入一个ScrollArea部件中。 让QLabel具有很多行内容。 QString strET = "";             for ( int i=0; i             {                 strET = strET + QString::number(i) + "\r\n";             }
QT学习之重写鼠标移动事件
QT平台上,重写mouseMoveEvent和paintEvent实现鼠标移动过程中,实时显示鼠标所在位置坐标的功能,练习demo..
如何实现图像的缩放功能?
在窗体中放入PictureBox控件,装载图像。请问如何实现图像的缩放功能?就像AutoCAD中的放大镜一样,显示放大镜选择的区域。还有缩小功能。(请给出源代码)
@@@@@@关于控件的缩放大小,如何重写实现?@@@@@@@
求Panel控件的重写,以实现可缩放大小,的源代码。
如何实现PictureBox的缩放功能?
我用PictureBox做了一个打印预览功能,目前只差一个缩放功能没法实现,希望大家帮忙想想有没有什么好的办法!分数不够可以再加,另贴结算!
如何实现PropertyGrid的缩放功能?
如题了rn因为我要实现类似功能,但是又不能直接和PropertyGrid绑定。rn谢谢啊。
如何实现图片的显示及缩放
如何用vc++实现:通过“文件”中的“打开”来显示一张bmp格式的图片,然后工具栏里添四个按钮,分别让图片实现放大、缩小、原始大小以及适合窗口大小呢?
如何实现图片的动态缩放
如何在delphi中实现bmp图片的动态缩放,请广大同仁多多指教,加急!
如何实现图片局部缩放?
请问哪位大哥有事先图片局部缩放的源码或控件,rn指教小弟一下,急!!rnrn我自己弄了一个,基本可以实现功能,但闪烁太rn厉害了。
Qt实现窗体缩放
用Qt实现的跨平台窗体缩放,详见博客:http://blog.csdn.net/caoshangpa/article/details/78543165
Qt事例: QScrollArea滚动区域
Qt事例: QScrollArea滚动区域 /******* ChatList.h ******/ #ifndef CHATLIST_H #define CHATLIST_H #include #include class ChatList: public QWidget { public:     ChatList(QWidget *parent);     ~C
QT下实现图片的自适应显示、缩放(以鼠标位置为中心进行缩放)、拖动、以及重置
系统配置:ThinkPad T570、Windows10、QT5.12.2(Qt Creater 4.8.2) 我是通过qt中的Graphics View控件来实现上述功能的,具体步骤如下: 1.新建一个qt界面工程,将一个Graphics View控件拖动到主界面,如下图: 2.在mainwindow.h中添加如下代码: 在文件头包含自己写的类 #include "imagewidget.h"...
图片实现缩放功能,设置缩放比例
设置属性最小缩放比例minimumZoomScale和最大缩放比例maximumZooScale; 给scrollView指定delegate被委托对象 被委托者遵守协议,并实现协议方法指定scrollView某个子视图被缩放:
Imageview 实现图片移动 缩放功能
功能实现依附于矩阵  所以布局文件中需要写矩阵    代码实现      布局文件     xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:app="http://schemas.android.com/apk/res-auto"    
自定义ImageView实现图片的缩放功能
自定义ImageView实现图片的缩放功能源码,具体实现细节见博文:http://blog.csdn.net/l1028386804/article/details/50062231
android 实现图片的拖拉缩放功能
自己写的小例子,实现了对屏幕的操作实现图片的拖拉缩放功能……
WebBrowser浏览图片实现缩放和鼠标移动功能?
我用D7写了个浏览图片的小工具,我把图片放到服务器上,客户端用WebBrowser1浏览图片,现在想实现2个功能:rn1.如何通过鼠标左右上下移动图片,鼠标直接在界面上拖拉的方式实现图片移动,而不是用现在的点右面边框的形式?rn2.用鼠标滚轴实现图片放大缩小?
qt中的QScrollArea没有滚动条
QVBoxLayout *e = new QVBoxLayout;rnForm *w1 = new Form;//QWidget的子类rnForm *w2 = new Form;rnForm *w3 = new Form;rn rne->addWidget(w1);rne->addWidget(w2);rne->addWidget(w3);rn rnui->scrollAreaWidgetContents->setLayout(e);rnui->scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);rn[img=https://img-bbs.csdn.net/upload/201703/26/1490489646_139463.png][/img]
实现画板缩放功能
可以方便进行图片的放大逾缩小,是用于picturebox的代码
如何重写 textbox的事件
我写重写 textbox 的 ontextchanged方法? rnrn本来这个方法像 js 的 onblur 事件 推动焦点触发事件rnrn现在我想改成 onkeypress 那个样子之类的 按下键就触发事件
如何重写事件?
在使用一套SDK开发软电话的过程中rn现有API中提供的事件无法满足我的要求rn请问我是否可以自己写一个事件,继承原有事件,并加入我的一些设定?rn比如:rn现有一个事件为:class Session.StateChangedrn表示session的状态改变,却无法表示是由什么状态变成什么状态。rn我可否自己写一个事件,比如class Session.StateChangedToAvailablern继承原有事件并限定状态变为available时发生此事件?rn应该如何实现?求助各位高手
IPU缩放图片的实现
int IPUScale::scale_image( QString s_src_file, unsigned int n_src_width, unsigned int n_src_height, QString s_des_file, unsigned int n_des_width, unsigned int n_des_height )
如何重写comboBox1_SelectedIndexChanged事件
如题,我做了一个c/s程序,想重写事件,做到选择comboBox的某一个值,就触发事件,
如何重写OnPaint事件?
最新做一个实验,有两个界面form1和temForm,现在遇到两个问题.rnrn问题一:rnrn在temForm中我要做的是一个根据数据库里的数据来绘制出不同颜色的矩形若干个,并且还要保持实时刷新,能从界面上矩形颜色的变化看出数据库数据的变化,在这个界面中我用了一个时钟time1进行每3秒刷新一次temForm,但事实上这个功能并没有实现,绘图我用了双缓冲,图像是绘出来了,可是数据库里的数据在变化,界面却没有实现预期的刷新功能.请大家帮帮忙,如何实现?rnrn有人说重写OnPaint事件就可以,谁能告诉我怎么重写OnPaint事件?rn我写的代码在下面:请帮帮忙,我该怎么做,谢谢.rnrn问题二:rnrn在form1中调用temform,让temform得以显示,并且还要实现 问题一 中期望的那样显示,但实际上,temform的界面是显示出来了,可是绘出来的图像只是一闪就没有了,过一会又是一闪又没有了,一直这样直到你关闭窗口.form1中调用temform的代码也在下面,请大家帮帮忙,我该怎么做,谢谢.rnrn以上两个问题答对任何一个均有分.rnrn问题一的代码如下:rnrnusing System;rnusing System.Collections.Generic;rnusing System.ComponentModel;rnusing System.Data;rnusing System.Data.SqlClient;rnusing System.Drawing;rnusing System.Text;rnusing System.Windows.Forms;rnusing System.Drawing.Drawing2D;rnrnnamespace temperaturernrn public partial class temForm : Formrn rn public temForm()rn rn InitializeComponent();rn rn private void temForm_Load(object sender, EventArgs e)rn rn rn protected override void OnPaint(PaintEventArgs e)rn rn Graphics buffergraphics = e.Graphics;rn Image mybuffer = new Bitmap(ClientRectangle.Width, ClientRectangle.Height);rn Graphics g = Graphics.FromImage(mybuffer);rnrn SqlConnection thisconnection = new SqlConnection(@"Data Source=(local);Initial Catalog=experiment;Integrated Security=True");rn thisconnection.Open();rn g.FillRectangle(Brushes.White, ClientRectangle);rn int i;rn int j;rn double m;rn Brush colorflag = Brushes.White;rn for (i = 10; i <= 300; i += 13)rn rn for (j = 20; j <= 500; j += 16)rn rn SqlCommand thiscommand = thisconnection.CreateCommand();rn thiscommand.CommandText = "select data from exp3 where x=" + i + " and y=" + j + " ";rn SqlDataReader thisreader = thiscommand.ExecuteReader();rn while (thisreader.Read())rn rn m = Convert.ToDouble(thisreader["data"]);rn if (m < 50)rn colorflag = Brushes.Lime; rn else if (m >= 50 & m < 70)rn colorflag = Brushes.SpringGreen; rn else if (m >= 70 & m < 90)rn colorflag = Brushes.PaleGreen; rn else if (m >= 90 )rn colorflag = Brushes.SeaGreen; rn rn g.FillRectangle(colorflag, new Rectangle(i, j, 10, 10));rn thisreader.Close();rn rn rn buffergraphics.DrawImage(mybuffer, ClientRectangle);rn mybuffer.Dispose();rn rn private void timer1_Tick(object sender, EventArgs e)rn rn this.Invalidate(); rn rnrnrn问题二的代码如下:rnrn private void temperaturemenu_Click(object sender, EventArgs e)rn rn temperature tempfrm = new temperature();rn tryrn rn tempfrm.ShowDialog();rn rn finallyrn rn tempfrm.Dispose();rn rn rnrn如何重写OnPaint事件?rn
CXImage缩放图片的实现
以点击某一点为中心进行缩放 类似于WINDOWS图片查看器 如何实现??
android图片的缩放和旋转功能
注意:这个程序本人亲自测试运行过的,完美实现了图片缩放和旋转的效果,seekBar1是用来图片缩放的   seekBar2是图片旋转的,image是图片资源文件,可以自己设置 文件一:MainActivity.java package com.example.zmap; import android.app.Activity; import android.graphics
请问在j2me中如何实现图片的缩放功能?感谢诸位。
现在就知道图片可以平移,但如何缩放呢?有什么好的建议吗,各位大侠。
照片查看器缩放图片功能
照片查看器缩放图片功能,可以放大图片缩小图片!
实现图片中心缩放
首先什么是中心缩放呢?相信大家都明白,就是以中心为原点放大图片。。。(感觉跟没说一样不过大家肯定都明白) 首先说一下用css3实现的方式: body{ background-color: #D3C7C7; } div{ width:300px; height:350px; margin:100px auto; } img{ cursor:point
相关热词 c# 线程结束时执行 c# kb mb 图片 c# 替换第几位字符 c#项目决定成败 c# 与matlab c# xml缩进 c#传感器基础 c#操作wps c# md5使用方法 c# 引用父窗口的组件