ScrollArea支持鼠标拖动
来源:互联网 发布:中国m2月度数据 编辑:程序博客网 时间:2024/06/06 02:57
创建自定义类,实现在滚动区域内拖动鼠标显示滚动条,否则不显示滚动条。
头文件
#ifndef MYSCROLLAREA_H#define MYSCROLLAREA_H#include <QObject>#include <QScrollArea>#include <QPoint>class MyScrollArea : public QScrollArea{ Q_OBJECTpublic: MyScrollArea(QWidget* parent = NULL); ~MyScrollArea();protected: bool eventFilter(QObject *obj,QEvent *evt);private: bool mMoveStart; bool mContinuousMove; QPoint mMousePoint;};#endif // MYSCROLLAREA_H源文件
#include "myscrollarea.h"#include <QMouseEvent>#include <QScrollBar>MyScrollArea::MyScrollArea(QWidget *parent) :QScrollArea(parent) //基类 ,mMoveStart(false) ,mContinuousMove(false) ,mMousePoint(QPoint(0,0)){ installEventFilter(this);}MyScrollArea::~MyScrollArea(){}bool MyScrollArea::eventFilter(QObject *obj, QEvent *evt){ if(evt->type() == QEvent::MouseMove) { QMouseEvent *me = (QMouseEvent*) evt; if(me->buttons() & Qt::LeftButton) { if(!mMoveStart) {// if(me->pos().y() < (horizontalScrollBar()->pos().y() + horizontalScrollBar()->height())// || me->pos().x() < (verticalScrollBar()->pos().x() + verticalScrollBar()->width()) )// return false; mMoveStart = true; mContinuousMove = false; mMousePoint = me->globalPos(); } else { setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);//开启滚动条 setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); QScrollBar *scrollBarx = horizontalScrollBar(); QScrollBar *scrollBary = verticalScrollBar(); QPoint p = me->globalPos(); int offsetx = p.x() - mMousePoint.x(); int offsety = p.y() - mMousePoint.y(); if(!mContinuousMove && (offsetx > -10 && offsetx < 10) && (offsety > -10 && offsety < 10)) return false; mContinuousMove = true; scrollBarx->setValue(scrollBarx->value() - offsetx); scrollBary->setValue(scrollBary->value() - offsety); mMousePoint = p; } return true; } } else if(evt->type() == QEvent::MouseButtonRelease) { mMoveStart = false; setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);//关闭滚动条 setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); } return QObject::eventFilter(obj,evt);}
阅读全文
0 0
- ScrollArea支持鼠标拖动
- Qt鼠标拖动ScrollArea代替鼠标滚轮操作
- java-支持鼠标拖动面板
- 树状控件支持鼠标拖动
- PyQt5让QScrollArea支持鼠标拖动操作
- Qt:支持鼠标拖动来移动内容的窗口
- Qt:支持鼠标拖动来移动内容的窗口
- [zhuan]Qt--支持鼠标拖动来移动内容的 QScrollArea
- pdfrender实现简易版pdf阅读器-支持鼠标拖动浏览
- 鼠标拖动
- 鼠标拖动
- 鼠标拖动
- C#:为PrintPreviewControl加上鼠标滚轮支持和鼠标拖动预览页支持
- 鼠标拖动JavaScript
- 鼠标拖动图片-javascript
- 鼠标拖动DIV
- C# 鼠标拖动图片
- 鼠标拖动Div
- sessionStorage、localStorage和cookie的区别
- 迭代器与组合模式
- linux 线程池服务器代码
- 可选择和输入的下拉列表框
- hadoop伪分布式配置
- ScrollArea支持鼠标拖动
- 网狐报服务组件加载失败,创建游戏房间失败的原因之一
- MySql 里的IFNULL、NULLIF和ISNULL用法
- mongdb创建用户并给予权限
- 路由器web界面分析(二)---web和底层如何交互
- 2017年第0届浙江工业大学之江学院程序设计竞赛决赛—A qwb与支教
- 人工智能与机器学习速查表
- 两道交互题
- maven编译项目时出错(1)