自定义QTableView鼠标滚轮行为
来源:互联网 发布:杜兰特体测数据 编辑:程序博客网 时间:2024/05/18 06:22
- 引言
- 方法1
- 在头文件中声明滚轮事件函数
- 重新实现wheelEvent函数
- 方法2
- 声明事件过滤器
- 安装事件过滤器
- 重写事件过滤器
- 参考
引言
项目中用到QTableView,其中部分item行高较高,而QTableView默认的鼠标滚轮行为只能定义为一次滚动一个像素或一次滚动一个item,如下:
ui_NetWork.tableView_Exchange->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);ui_NetWork.tableView_Exchange->setVerticalScrollMode(QAbstractItemView::ScrollPerItem);
前者太慢,后者又不连续。
本文采用重载wheelEvent()事件的方法实现更加顺滑、舒适的滚轮行为。
方法1
1.在头文件中声明滚轮事件函数
protected: void wheelEvent(QWheelEvent*event);//滚轮事件
2.重新实现wheelEvent()函数
void NetworkFrame::wheelEvent(QWheelEvent *event){ int para=event->angleDelta().y();//获得鼠标滚轮的滚动距离para,para<0向下滚动,>0向上滚动 int tempStep=ui_NetWork.tableView_Exchange->verticalScrollBar()->value(); if (para<0) { //向下滚动,设定鼠标滚轮每滚动一个单位,滑块就移动20个单位 ui_NetWork.tableView_Exchange->verticalScrollBar()->setSliderPosition(tempStep+20); } else { //向上滚动 ui_NetWork.tableView_Exchange->verticalScrollBar()->setSliderPosition(tempStep-20); } event->accept(); //接收该事件}
方法2
如果这个控件没有独立的实现函数,比如是在UI中添加的,也没有别的需要实现的函数,可使用该方法。
实际上当鼠标位于控件上并滚动时,接收滚动动作的是该控件的滚动条,所以只要在主窗口的eventFilter中对target为滚动条的滚轮动作进行截获并处理就好了,当然首先要给滚动条安装事件过滤器。
1.声明事件过滤器
protected: bool eventFilter(QObject *obj, QEvent *event);//事件过滤器
2.安装事件过滤器
//安装事件过滤器,在主窗口的eventFilter中对target为滚动条的滚轮动作进行截获并处理 ui_NetWork.tableView_Exchange->verticalScrollBar()->installEventFilter(this);
3.重写事件过滤器
bool NetworkFrame::eventFilter(QObject *obj, QEvent *event){ if (obj == ui_NetWork.tableView_Exchange->verticalScrollBar()) { if(event->type() == QEvent::Wheel) { QWheelEvent *event1 = static_cast<QWheelEvent *>(event); int para=event1->angleDelta().y();//获得鼠标滚轮的滚动距离para,para<0向下滚动,>0向上滚动 int tempStep=ui_NetWork.tableView_Exchange->verticalScrollBar()->value(); if (para<0) { //向下滚动,设定鼠标滚轮每滚动一个单位,滑块就移动20个单位 ui_NetWork.tableView_Exchange->verticalScrollBar()->setSliderPosition(tempStep+20); } else { //向上滚动 ui_NetWork.tableView_Exchange->verticalScrollBar()->setSliderPosition(tempStep-20); } return true; } } //其它事件交基类处理 return QMainWindow::eventFilter(obj, event); }
参考
自定义QTreeWidget和QTableWidget控件鼠标滚轮事件
滚动条QScroolBar实现滚屏功能
阅读全文
0 0
- 自定义QTableView鼠标滚轮行为
- 自定义控件加入鼠标滚轮事件
- 鼠标滚轮
- 自定义QTreeWidget和QTableWidget控件鼠标滚轮事件
- [PyQt] 自定义QSlider支持鼠标点击和滚轮事件
- JS自定义滚动条效果+鼠标滚轮事件
- 自定义滚轮
- 自定义滚轮
- JS的事件(2)--事件函数的取消/事件默认行为/键盘事件/鼠标滚轮事件
- VB模拟鼠标滚轮
- 鼠标滚轮控制图片大小
- 鼠标滚轮控制图片大小
- KDE鼠标支持滚轮
- 判断鼠标滚轮
- 鼠标滚轮事件
- JS控制鼠标滚轮
- javascript: 鼠标滚轮事件
- 兼容鼠标滚轮事件
- 浅谈对Spring IOC以及DI的理解
- NodeJs安装和需要注意的问题
- Spring ORM数据访问——JPA
- 重定向与请求转发
- MySQL控制台基本命令
- 自定义QTableView鼠标滚轮行为
- ONVIF协议网络摄像机(IPC)客户端程序开发(2):第一次使用IPC摄像头
- IOS开发入门:官方文档 Auido Session Programming Guide 翻译
- JavaSE编码规范
- ssh私钥登录
- centos7上使用locate命令
- 续oracle sqlload 导入数据文件细节问题说明
- 在windows命令端口下切换到某个目录或者文件夹
- 2017华为软件精英挑战赛总结