通用移动类,目标就是为了实现放入任意的控件以后,支持鼠标拖动,在容器中或者父类中拖动,这个应用场景非常多,比如在地图上放置的设备,需要用户自行按下拖动到指定的合适的位置,然后保存设备的位置坐标到数据库,下次打开直接加载,在一些安防项目、电力项目、环境监测等上面大量运用,有时候设备对应了多种类型,以前做的办法是将这个移动的代码直接封装在对应设备的自定义控件中,有个巨大缺点就是如果再新增加一个控件,又需要重复的代码加到控件中才行,可否将这个功能独立出来,只要传入控件就行呢,当然可以,比如我写过很多自定义控件,现在需要控件放到某个容器中能自由拖动,只需要new出通用移动类来就行。
项目开源地址:https://gitee.com/feiyangqingyun/QWidgetDemo
#ifndef MOVEWIDGET_H
#define MOVEWIDGET_H
/**
* 通用控件移动类 作者:feiyangqingyun(QQ:517216493) 2019-9-28
* 1:可以指定需要移动的widget
* 2:可设置是否限定鼠标左键拖动
* 3:支持任意widget控件
*/
#include <QWidget>
#ifdef quc
#if (QT_VERSION < QT_VERSION_CHECK(5,7,0))
#include <QtDesigner/QDesignerExportWidget>
#else
#include <QtUiPlugin/QDesignerExportWidget>
#endif
class QDESIGNER_WIDGET_EXPORT MoveWidget : public QObject
#else
class MoveWidget : public QObject
#endif
{
Q_OBJECT
public:
explicit MoveWidget(QObject *parent=0);
protected:
bool eventFilter(QObject *watched, QEvent *event);
private:
QPoint lastPoint; //最后按下的坐标
bool pressed; //鼠标是否按下
bool leftButton; //限定鼠标左键
QWidget *widget; //移动的控件
public Q_SLOTS:
//设置是否限定鼠标左键
void setLeftButton(bool leftButton);
//设置要移动的控件
void setWidget(QWidget *widget);
};
#endif // MOVEWIDGET_H
【领QT开发教程学习资料,点击下方链接莬费领取↓↓,先码住不迷路~】
点击这里:「链接」
#include "movewidget.h"
#include "qevent.h"
#include "qdebug.h"
MoveWidget::MoveWidget(QObject *parent) : QObject(parent)
{
lastPoint=QPoint(0, 0);
pressed=false;
leftButton=true;
widget=0;
}
bool MoveWidget::eventFilter(QObject *watched, QEvent *event)
{
if (widget !=0 && watched==widget) {
QMouseEvent *mouseEvent=(QMouseEvent *)event;
if (mouseEvent->type()==QEvent::MouseButtonPress) {
//如果限定了只能鼠标左键拖动则判断当前是否是鼠标左键
if (leftButton && mouseEvent->button() !=Qt::LeftButton) {
return false;
}
//判断控件的区域是否包含了当前鼠标的坐标
if (widget->rect().contains(mouseEvent->pos())) {
lastPoint=mouseEvent->pos();
pressed=true;
}
} else if (mouseEvent->type()==QEvent::MouseMove && pressed) {
//计算坐标偏移值,调用move函数移动过去
int offsetX=mouseEvent->pos().x() - lastPoint.x();
int offsetY=mouseEvent->pos().y() - lastPoint.y();
widget->move(widget->x() + offsetX, widget->y() + offsetY);
} else if (mouseEvent->type()==QEvent::MouseButtonRelease && pressed) {
pressed=false;
}
}
return QObject::eventFilter(watched, event);
}
void MoveWidget::setWidget(QWidget *widget)
{
if (this->widget==0) {
this->widget=widget;
this->widget->installEventFilter(this);
}
}
void MoveWidget::setLeftButton(bool leftButton)
{
this->leftButton=leftButton;
}
原文链接:https://www.cnblogs.com/feiyangqingyun/p/11608377.html
【领QT开发教程学习资料,点击下方链接莬费领取↓↓,先码住不迷路~】
点击这里:Qt资料领取(视频教程+文档+代码+项目实战)
用JavaScript实现页面滑动到指定位置加载动画。
若页面滚动到class名为group-pic的元素的位置时开始加载
原理: 1.获取浏览器窗口的高度;
2.获取页面滚动的高度;
3.获取页面距离文档(document)顶部的高度
offset().top具体指的是距哪里的高度呢?
一些获宽高度的属性:
网页可见区域宽: document.body.clientWidth;
网页可见区域高: document.body.clientHeight;
网页可见区域宽: document.body.offsetWidth (包括边线的宽);
网页可见区域高: document.body.offsetHeight (包括边线的宽);
网页正文全文宽: document.body.scrollWidth;
网页正文全文高: document.body.scrollHeight;
网页被卷去的高: document.body.scrollTop;
网页被卷去的左: document.body.scrollLeft;
网页正文部分上: window.screenTop;
网页正文部分左: window.screenLeft;
屏幕分辨率的高: window.screen.height;
屏幕分辨率的宽: window.screen.width;
屏幕可用工作区高度: window.screen.availHeight;
屏幕可用工作区宽度:window.screen.availWidth;
obj.offsetTop 指 obj 距离上方或上层控件的位置,整型,单位像素。
obj.offsetLeft 指 obj 距离左方或上层控件的位置,整型,单位像素。
obj.offsetWidth 指 obj 控件自身的宽度,整型,单位像素。
obj.offsetHeight 指 obj 控件自身的高度,整型,单位像素。
1.offsetTop : 当前对象到其上级层顶部的距离.
不能对其进行赋值.设置对象到页面顶部的距离请用style.top属性.
2.offsetLeft : 当前对象到其上级层左边的距离.
不能对其进行赋值.设置对象到页面左部的距离请用style.left属性.
3.offsetWidth : 当前对象的宽度.
与style.width属性的区别在于:如对象的宽度设定值为百分比宽度,则无论页面变大还是变小,style.width都返回此百分比,而offsetWidth则返回在不同页面中对象的宽度值而不是百分比值
4.offsetHeight : 与style.height属性的区别在于:如对象的宽度设定值为百分比高度,则无论页面变大还是变小,style.height都返回此百分比,而offsetHeight则返回在不同页面中对象的高度值而不是百分比值
想绘图插件5.2(MxDraw5.2)
梦想CAD是专业的CAD插件(控件),经过10年研发,可轻松在网页、手机及BS/CS程序中使用CAD和浏览编辑DWG文件,不需安装AutoCAD即可运行。
控件核心代码使用VC++ 2010开发,至今已有三十万行代码规模;2007年发布第一个Release版本,经过多年的版本更迭与技术沉淀,控件已经十分快速稳定。在关键的 空间搜索 上使用了复杂度极低的算法,并且使用 汇编 优化,可以处理50万级的实体,图形的显示和处理效率比同类产品高出很多。
梦想绘图3d插件6.0(MxDraw6.03d)
使用二位控件的显示核心,基于 OpenCASCADE几何造型引擎 ,创建锥、柱、环等基本几何体,对几何体进行 布尔操作 ,如:相加、相减、相较、倒角、斜切、镂空、偏移、扫视;几何 空间关系计算 ,如:法线、点积、叉积、投影、拟合;几何体分析,如:质心、体积、曲率; 空间变换 ,如:平移、缩放、旋转。
梦想绘图手机版插件6.0(MxDrawAndroid6.0/MxDrawIOS6.0/)
使用二维控件的显示核心,并专对手机显示CAD图纸做了极速优化 ,是目前手机上显示DWG文件非常快的控件。
梦想CAD软件5.2(MxCAD5.0)
使用二维控件的显示核心,完全自主的二维CAD绘图软件,程序简洁、运行快速、功能齐全、稳定可靠;兼容 所有版本的DWG文件 ,支持 ARX的二次开发接口。
安装包下载
点击此处下载
运行环境
支持以下的32/64平台的系统:WindowsXP、Windows2000、WindowsVista、WindowsServer、Windows7、Windows8、Windows10。
支持以下的浏览器:IE所有版本、火狐、谷歌4.5及以前的版本、360浏览器(兼容模式)、QQ浏览器。
1
QQ浏览器使用了最新的谷歌浏览器内核,可使用QQ浏览器代替谷歌浏览器运行控件
支持语言
网页使用,支持 IE所有版本 。
控件支持如下的语言进行二次开发:VC、VB、CSharp、Delphi、HTML、ASP、JAVA、JavaScript、C++、 Builder、PHP、.Net、易语言、PowerBuild等。
编程接口
有一万多个接口函数 可供调用,提供Object Arx,AutoCAD VBA、COM开发接口,与AutoCAD二次开发类似的接口。
文件格式
控件支持自定义文件格式,扩展名为.mxg,mxg文件 稳定可靠 ,能 完整呈现DWG文件 ,支持图纸预览,加密;支持DWG、DXG、BMP、JPG、PNG、DWF、PDF、GIF、ICO DGN、SHP等。
支持SHX、TrueType字体。
控件与AutoCAD兼容,支持AutoCAD R14至AutoCAD 2017的 所有DWG图纸格式 ,并保证能支持将来新出现的AutoCAD文件格式。
网络功能
在控件支持的浏览器(见 运行环境 )中,控件可浏览服务器上的DWG文件,把DWG文件保存到服务器、在服务器后台运行控件、把DWG转成其他格式、提取信息等;支持FTP连接,二进制数据流加载。
在网页中使用控件演示
主要功能
DWG批量转到PDF、DWF,图纸信息搜索提取,测距离,算面积,图章, 批注 ,捕捉,正交,实体闪烁,曲线离散,偏移,打断,阵列,扩展数据读写,扩展记录读写,构造选择集,打印, 动画 , 自定义实体 ,组,右键菜单, 超连接 ,Undo,Redo,字典,图层,标注样式,线型样式,文字样式,视口,布局, 用户坐标系 ,系统变量,图纸比较,图纸剪切,界面切换,动态提示,google百度地图等。
打印功能
框选、全屏打印、后台批量打印、多个 图纸嵌套打印 、与 网页合并打印 等。
显示功能
鸟瞰、放大镜、视区平移、缩放、视区旋转、鹰眼、 透明显示 、背景、水印、网格、回溯显示、最佳显示、显示/隐藏工具条、浏览模式、 分屏显示 、矢量线、矢量圆、 动画 、动态标注、叠加对比显示等。
图元支持
主要实体有:直线,圆弧,Polyline,样条线,圆,椭圆,椭圆弧,IMAGE,点,块引用,外部块参照,射线,云线,文本,多行文本,对齐标注,旋转标注 ,半径标注,直径标注,角度标注,OLE对象,布局,视口,图层,线型,文字样式,命名字典,标注, 自定义实体 ,代理实体, 反应器 等。主要编辑有:移动,夹点拉伸,偏移,删除,复制,粘贴,旋转,缩放,镜向,离散,图案填充,实心填充,打碎,计算曲线长,面积,最jin点,交点,导角, 文字变线条 等。
编辑支持
移动、夹点拉伸、偏移、删除、复制、粘贴、旋转、缩放、镜向、离散、图案填充、实心填充、打碎、计算曲线长、面积、最近点、交点、倒角、文字变线条等。
几何运算
面积,夹角,向量,矩阵,旋转,缩放,最进点,最进距离,垂足,参数,镜向,平移,交点,打断,延伸, 最短路径 , 最长路径 。
支持事件
鼠标事件 , 键盘事件 ,选择修改,夹点编辑,打图纸完成,命令开始,命令执行完成,视区变化,动态提示,动态绘制,超连接点击,对象修改,命令执行,进度条变动,系统变量修改,控件初始化完成,等事件。
*请认真填写需求信息,我们会在24小时内与您取得联系。