Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
通用移動(dòng)類,目標(biāo)就是為了實(shí)現(xiàn)放入任意的控件以后,支持鼠標(biāo)拖動(dòng),在容器中或者父類中拖動(dòng),這個(gè)應(yīng)用場(chǎng)景非常多,比如在地圖上放置的設(shè)備,需要用戶自行按下拖動(dòng)到指定的合適的位置,然后保存設(shè)備的位置坐標(biāo)到數(shù)據(jù)庫(kù),下次打開(kāi)直接加載,在一些安防項(xiàng)目、電力項(xiàng)目、環(huán)境監(jiān)測(cè)等上面大量運(yùn)用,有時(shí)候設(shè)備對(duì)應(yīng)了多種類型,以前做的辦法是將這個(gè)移動(dòng)的代碼直接封裝在對(duì)應(yīng)設(shè)備的自定義控件中,有個(gè)巨大缺點(diǎn)就是如果再新增加一個(gè)控件,又需要重復(fù)的代碼加到控件中才行,可否將這個(gè)功能獨(dú)立出來(lái),只要傳入控件就行呢,當(dāng)然可以,比如我寫過(guò)很多自定義控件,現(xiàn)在需要控件放到某個(gè)容器中能自由拖動(dòng),只需要new出通用移動(dòng)類來(lái)就行。
項(xiàng)目開(kāi)源地址:https://gitee.com/feiyangqingyun/QWidgetDemo
#ifndef MOVEWIDGET_H
#define MOVEWIDGET_H
/**
* 通用控件移動(dòng)類 作者:feiyangqingyun(QQ:517216493) 2019-9-28
* 1:可以指定需要移動(dòng)的widget
* 2:可設(shè)置是否限定鼠標(biāo)左鍵拖動(dòng)
* 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; //最后按下的坐標(biāo)
bool pressed; //鼠標(biāo)是否按下
bool leftButton; //限定鼠標(biāo)左鍵
QWidget *widget; //移動(dòng)的控件
public Q_SLOTS:
//設(shè)置是否限定鼠標(biāo)左鍵
void setLeftButton(bool leftButton);
//設(shè)置要移動(dòng)的控件
void setWidget(QWidget *widget);
};
#endif // MOVEWIDGET_H
【領(lǐng)QT開(kāi)發(fā)教程學(xué)習(xí)資料,點(diǎn)擊下方鏈接莬費(fèi)領(lǐng)取↓↓,先碼住不迷路~】
點(diǎn)擊這里:「鏈接」
#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) {
//如果限定了只能鼠標(biāo)左鍵拖動(dòng)則判斷當(dāng)前是否是鼠標(biāo)左鍵
if (leftButton && mouseEvent->button() !=Qt::LeftButton) {
return false;
}
//判斷控件的區(qū)域是否包含了當(dāng)前鼠標(biāo)的坐標(biāo)
if (widget->rect().contains(mouseEvent->pos())) {
lastPoint=mouseEvent->pos();
pressed=true;
}
} else if (mouseEvent->type()==QEvent::MouseMove && pressed) {
//計(jì)算坐標(biāo)偏移值,調(diào)用move函數(shù)移動(dòng)過(guò)去
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
【領(lǐng)QT開(kāi)發(fā)教程學(xué)習(xí)資料,點(diǎn)擊下方鏈接莬費(fèi)領(lǐng)取↓↓,先碼住不迷路~】
點(diǎn)擊這里:Qt資料領(lǐng)取(視頻教程+文檔+代碼+項(xiàng)目實(shí)戰(zhàn))
用JavaScript實(shí)現(xiàn)頁(yè)面滑動(dòng)到指定位置加載動(dòng)畫(huà)。
若頁(yè)面滾動(dòng)到class名為group-pic的元素的位置時(shí)開(kāi)始加載
原理: 1.獲取瀏覽器窗口的高度;
2.獲取頁(yè)面滾動(dòng)的高度;
3.獲取頁(yè)面距離文檔(document)頂部的高度
offset().top具體指的是距哪里的高度呢?
一些獲寬高度的屬性:
網(wǎng)頁(yè)可見(jiàn)區(qū)域?qū)挘?document.body.clientWidth;
網(wǎng)頁(yè)可見(jiàn)區(qū)域高: document.body.clientHeight;
網(wǎng)頁(yè)可見(jiàn)區(qū)域?qū)挘?document.body.offsetWidth (包括邊線的寬);
網(wǎng)頁(yè)可見(jiàn)區(qū)域高: document.body.offsetHeight (包括邊線的寬);
網(wǎng)頁(yè)正文全文寬: document.body.scrollWidth;
網(wǎng)頁(yè)正文全文高: document.body.scrollHeight;
網(wǎng)頁(yè)被卷去的高: document.body.scrollTop;
網(wǎng)頁(yè)被卷去的左: document.body.scrollLeft;
網(wǎng)頁(yè)正文部分上: window.screenTop;
網(wǎng)頁(yè)正文部分左: window.screenLeft;
屏幕分辨率的高: window.screen.height;
屏幕分辨率的寬: window.screen.width;
屏幕可用工作區(qū)高度: window.screen.availHeight;
屏幕可用工作區(qū)寬度:window.screen.availWidth;
obj.offsetTop 指 obj 距離上方或上層控件的位置,整型,單位像素。
obj.offsetLeft 指 obj 距離左方或上層控件的位置,整型,單位像素。
obj.offsetWidth 指 obj 控件自身的寬度,整型,單位像素。
obj.offsetHeight 指 obj 控件自身的高度,整型,單位像素。
1.offsetTop : 當(dāng)前對(duì)象到其上級(jí)層頂部的距離.
不能對(duì)其進(jìn)行賦值.設(shè)置對(duì)象到頁(yè)面頂部的距離請(qǐng)用style.top屬性.
2.offsetLeft : 當(dāng)前對(duì)象到其上級(jí)層左邊的距離.
不能對(duì)其進(jìn)行賦值.設(shè)置對(duì)象到頁(yè)面左部的距離請(qǐng)用style.left屬性.
3.offsetWidth : 當(dāng)前對(duì)象的寬度.
與style.width屬性的區(qū)別在于:如對(duì)象的寬度設(shè)定值為百分比寬度,則無(wú)論頁(yè)面變大還是變小,style.width都返回此百分比,而offsetWidth則返回在不同頁(yè)面中對(duì)象的寬度值而不是百分比值
4.offsetHeight : 與style.height屬性的區(qū)別在于:如對(duì)象的寬度設(shè)定值為百分比高度,則無(wú)論頁(yè)面變大還是變小,style.height都返回此百分比,而offsetHeight則返回在不同頁(yè)面中對(duì)象的高度值而不是百分比值
想繪圖插件5.2(MxDraw5.2)
夢(mèng)想CAD是專業(yè)的CAD插件(控件),經(jīng)過(guò)10年研發(fā),可輕松在網(wǎng)頁(yè)、手機(jī)及BS/CS程序中使用CAD和瀏覽編輯DWG文件,不需安裝AutoCAD即可運(yùn)行。
控件核心代碼使用VC++ 2010開(kāi)發(fā),至今已有三十萬(wàn)行代碼規(guī)模;2007年發(fā)布第一個(gè)Release版本,經(jīng)過(guò)多年的版本更迭與技術(shù)沉淀,控件已經(jīng)十分快速穩(wěn)定。在關(guān)鍵的 空間搜索 上使用了復(fù)雜度極低的算法,并且使用 匯編 優(yōu)化,可以處理50萬(wàn)級(jí)的實(shí)體,圖形的顯示和處理效率比同類產(chǎn)品高出很多。
夢(mèng)想繪圖3d插件6.0(MxDraw6.03d)
使用二位控件的顯示核心,基于 OpenCASCADE幾何造型引擎 ,創(chuàng)建錐、柱、環(huán)等基本幾何體,對(duì)幾何體進(jìn)行 布爾操作 ,如:相加、相減、相較、倒角、斜切、鏤空、偏移、掃視;幾何 空間關(guān)系計(jì)算 ,如:法線、點(diǎn)積、叉積、投影、擬合;幾何體分析,如:質(zhì)心、體積、曲率; 空間變換 ,如:平移、縮放、旋轉(zhuǎn)。
夢(mèng)想繪圖手機(jī)版插件6.0(MxDrawAndroid6.0/MxDrawIOS6.0/)
使用二維控件的顯示核心,并專對(duì)手機(jī)顯示CAD圖紙做了極速優(yōu)化 ,是目前手機(jī)上顯示DWG文件非常快的控件。
夢(mèng)想CAD軟件5.2(MxCAD5.0)
使用二維控件的顯示核心,完全自主的二維CAD繪圖軟件,程序簡(jiǎn)潔、運(yùn)行快速、功能齊全、穩(wěn)定可靠;兼容 所有版本的DWG文件 ,支持 ARX的二次開(kāi)發(fā)接口。
安裝包下載
點(diǎn)擊此處下載
運(yùn)行環(huán)境
支持以下的32/64平臺(tái)的系統(tǒng):WindowsXP、Windows2000、WindowsVista、WindowsServer、Windows7、Windows8、Windows10。
支持以下的瀏覽器:IE所有版本、火狐、谷歌4.5及以前的版本、360瀏覽器(兼容模式)、QQ瀏覽器。
1
QQ瀏覽器使用了最新的谷歌瀏覽器內(nèi)核,可使用QQ瀏覽器代替谷歌瀏覽器運(yùn)行控件
支持語(yǔ)言
網(wǎng)頁(yè)使用,支持 IE所有版本 。
控件支持如下的語(yǔ)言進(jìn)行二次開(kāi)發(fā):VC、VB、CSharp、Delphi、HTML、ASP、JAVA、JavaScript、C++、 Builder、PHP、.Net、易語(yǔ)言、PowerBuild等。
編程接口
有一萬(wàn)多個(gè)接口函數(shù) 可供調(diào)用,提供Object Arx,AutoCAD VBA、COM開(kāi)發(fā)接口,與AutoCAD二次開(kāi)發(fā)類似的接口。
文件格式
控件支持自定義文件格式,擴(kuò)展名為.mxg,mxg文件 穩(wěn)定可靠 ,能 完整呈現(xiàn)DWG文件 ,支持圖紙預(yù)覽,加密;支持DWG、DXG、BMP、JPG、PNG、DWF、PDF、GIF、ICO DGN、SHP等。
支持SHX、TrueType字體。
控件與AutoCAD兼容,支持AutoCAD R14至AutoCAD 2017的 所有DWG圖紙格式 ,并保證能支持將來(lái)新出現(xiàn)的AutoCAD文件格式。
網(wǎng)絡(luò)功能
在控件支持的瀏覽器(見(jiàn) 運(yùn)行環(huán)境 )中,控件可瀏覽服務(wù)器上的DWG文件,把DWG文件保存到服務(wù)器、在服務(wù)器后臺(tái)運(yùn)行控件、把DWG轉(zhuǎn)成其他格式、提取信息等;支持FTP連接,二進(jìn)制數(shù)據(jù)流加載。
在網(wǎng)頁(yè)中使用控件演示
主要功能
DWG批量轉(zhuǎn)到PDF、DWF,圖紙信息搜索提取,測(cè)距離,算面積,圖章, 批注 ,捕捉,正交,實(shí)體閃爍,曲線離散,偏移,打斷,陣列,擴(kuò)展數(shù)據(jù)讀寫,擴(kuò)展記錄讀寫,構(gòu)造選擇集,打印, 動(dòng)畫(huà) , 自定義實(shí)體 ,組,右鍵菜單, 超連接 ,Undo,Redo,字典,圖層,標(biāo)注樣式,線型樣式,文字樣式,視口,布局, 用戶坐標(biāo)系 ,系統(tǒng)變量,圖紙比較,圖紙剪切,界面切換,動(dòng)態(tài)提示,google百度地圖等。
打印功能
框選、全屏打印、后臺(tái)批量打印、多個(gè) 圖紙嵌套打印 、與 網(wǎng)頁(yè)合并打印 等。
顯示功能
鳥(niǎo)瞰、放大鏡、視區(qū)平移、縮放、視區(qū)旋轉(zhuǎn)、鷹眼、 透明顯示 、背景、水印、網(wǎng)格、回溯顯示、最佳顯示、顯示/隱藏工具條、瀏覽模式、 分屏顯示 、矢量線、矢量圓、 動(dòng)畫(huà) 、動(dòng)態(tài)標(biāo)注、疊加對(duì)比顯示等。
圖元支持
主要實(shí)體有:直線,圓弧,Polyline,樣條線,圓,橢圓,橢圓弧,IMAGE,點(diǎn),塊引用,外部塊參照,射線,云線,文本,多行文本,對(duì)齊標(biāo)注,旋轉(zhuǎn)標(biāo)注 ,半徑標(biāo)注,直徑標(biāo)注,角度標(biāo)注,OLE對(duì)象,布局,視口,圖層,線型,文字樣式,命名字典,標(biāo)注, 自定義實(shí)體 ,代理實(shí)體, 反應(yīng)器 等。主要編輯有:移動(dòng),夾點(diǎn)拉伸,偏移,刪除,復(fù)制,粘貼,旋轉(zhuǎn),縮放,鏡向,離散,圖案填充,實(shí)心填充,打碎,計(jì)算曲線長(zhǎng),面積,最jin點(diǎn),交點(diǎn),導(dǎo)角, 文字變線條 等。
編輯支持
移動(dòng)、夾點(diǎn)拉伸、偏移、刪除、復(fù)制、粘貼、旋轉(zhuǎn)、縮放、鏡向、離散、圖案填充、實(shí)心填充、打碎、計(jì)算曲線長(zhǎng)、面積、最近點(diǎn)、交點(diǎn)、倒角、文字變線條等。
幾何運(yùn)算
面積,夾角,向量,矩陣,旋轉(zhuǎn),縮放,最進(jìn)點(diǎn),最進(jìn)距離,垂足,參數(shù),鏡向,平移,交點(diǎn),打斷,延伸, 最短路徑 , 最長(zhǎng)路徑 。
支持事件
鼠標(biāo)事件 , 鍵盤事件 ,選擇修改,夾點(diǎn)編輯,打圖紙完成,命令開(kāi)始,命令執(zhí)行完成,視區(qū)變化,動(dòng)態(tài)提示,動(dòng)態(tài)繪制,超連接點(diǎn)擊,對(duì)象修改,命令執(zhí)行,進(jìn)度條變動(dòng),系統(tǒng)變量修改,控件初始化完成,等事件。
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。