整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          Qt編寫自定義控件-通用移動

          Qt編寫自定義控件-通用移動

          、前言

          通用移動類,目標就是為了實現放入任意的控件以后,支持鼠標拖動,在容器中或者父類中拖動,這個應用場景非常多,比如在地圖上放置的設備,需要用戶自行按下拖動到指定的合適的位置,然后保存設備的位置坐標到數據庫,下次打開直接加載,在一些安防項目、電力項目、環境監測等上面大量運用,有時候設備對應了多種類型,以前做的辦法是將這個移動的代碼直接封裝在對應設備的自定義控件中,有個巨大缺點就是如果再新增加一個控件,又需要重復的代碼加到控件中才行,可否將這個功能獨立出來,只要傳入控件就行呢,當然可以,比如我寫過很多自定義控件,現在需要控件放到某個容器中能自由拖動,只需要new出通用移動類來就行。
          項目開源地址:https://gitee.com/feiyangqingyun/QWidgetDemo

          二、實現的功能

          • 1:可以指定需要移動的widget
          • 2:可設置是否限定鼠標左鍵拖動
          • 3:支持任意widget控件

          三、效果圖

          四、頭文件代碼

          #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;
          }
          
          
          

          六、控件介紹

          1. 超過150個精美控件,涵蓋了各種儀表盤、進度條、進度球、指南針、曲線圖、標尺、溫度計、導航條、導航欄,flatui、高亮按鈕、滑動選擇器、農歷等。遠超qwt集成的控件數量。
          2. 每個類都可以獨立成一個單獨的控件,零耦合,每個控件一個頭文件和一個實現文件,不依賴其他文件,方便單個控件以源碼形式集成到項目中,較少代碼量。qwt的控件類環環相扣,高度耦合,想要使用其中一個控件,必須包含所有的代碼。
          3. 全部純Qt編寫,QWidget+QPainter繪制,支持Qt4.6到Qt5.13的任何Qt版本,支持mingw、msvc、gcc等編譯器,支持任意操作系統比如windows+linux+mac+嵌入式linux等,不亂碼,可直接集成到Qt Creator中,和自帶的控件一樣使用,大部分效果只要設置幾個屬性即可,極為方便。
          4. 每個控件都有一個對應的單獨的包含該控件源碼的DEMO,方便參考使用。同時還提供一個所有控件使用的集成的DEMO。
          5. 每個控件的源代碼都有詳細中文注釋,都按照統一設計規范編寫,方便學習自定義控件的編寫。
          6. 每個控件默認配色和demo對應的配色都非常精美。
          7. 超過130個可見控件,6個不可見控件。
          8. 部分控件提供多種樣式風格選擇,多種指示器樣式選擇。
          9. 所有控件自適應窗體拉伸變化。
          10. 集成自定義控件屬性設計器,支持拖曳設計,所見即所得,支持導入導出xml格式。
          11. 自帶activex控件demo,所有控件可以直接運行在ie瀏覽器中。
          12. 集成fontawesome圖形字體+阿里巴巴iconfont收藏的幾百個圖形字體,享受圖形字體帶來的樂趣。
          13. 所有控件最后生成一個動態庫文件(dll或者so等),可以直接集成到qtcreator中拖曳設計使用。
          14. 目前已經有qml版本,后期會考慮出pyqt版本,如果用戶需求量很大的話。
          15. 自定義控件插件開放動態庫使用(永久免費),無任何后門和限制,請放心使用。
          16. 目前已提供26個版本的dll,其中包括了qt5.12.3 msvc2017 32+64 mingw 32+64 的。
          17. 不定期增加控件和完善控件,不定期更新SDK,歡迎各位提出建議,謝謝!
          18. Qt入門書籍推薦霍亞飛的《Qt Creator快速入門》《Qt5編程入門》,Qt進階書籍推薦官方的《C++ GUI Qt4編程》。
          19. 強烈推薦程序員自我修養和規劃系列書《大話程序員》《程序員的成長課》《解憂程序員》,受益匪淺,受益終生!
          20. SDK地址:https://gitee.com/feiyangqingyun/QUCSDK

          原文鏈接:https://www.cnblogs.com/feiyangqingyun/p/11608377.html

          【領QT開發教程學習資料,點擊下方鏈接莬費領取↓↓,先碼住不迷路~】

          點擊這里:Qt資料領取(視頻教程+文檔+代碼+項目實戰)

          用JavaScript實現頁面滑動到指定位置加載動畫。

          若頁面滾動到class名為group-pic的元素的位置時開始加載


          1. $(document).ready(function(){
          2. var a,b,c;
          3. a=$(window).height(); //瀏覽器窗口高度
          4. var group=$(".group-pic");
          5. $(window).scroll(function(){
          6. b=$(this).scrollTop(); //頁面滾動的高度
          7. c=group.offset().top; //元素距離文檔(document)頂部的高度
          8. if(a+b>c){
          9. ...
          10. }else{
          11. ...
          12. }
          13. });
          14. });

          原理: 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點,交點,導角, 文字變線條 等。

          編輯支持

          移動、夾點拉伸、偏移、刪除、復制、粘貼、旋轉、縮放、鏡向、離散、圖案填充、實心填充、打碎、計算曲線長、面積、最近點、交點、倒角、文字變線條等。

          幾何運算

          面積,夾角,向量,矩陣,旋轉,縮放,最進點,最進距離,垂足,參數,鏡向,平移,交點,打斷,延伸, 最短路徑最長路徑

          支持事件

          鼠標事件鍵盤事件 ,選擇修改,夾點編輯,打圖紙完成,命令開始,命令執行完成,視區變化,動態提示,動態繪制,超連接點擊,對象修改,命令執行,進度條變動,系統變量修改,控件初始化完成,等事件。


          主站蜘蛛池模板: 无码夜色一区二区三区| 美女视频黄a视频全免费网站一区| 国产91精品一区二区麻豆网站| 国产一区二区三区无码免费| 日本一区二区不卡在线| 无码一区二区三区亚洲人妻| 日韩精品无码免费一区二区三区| 夜夜爽一区二区三区精品| 中文字幕无线码一区2020青青 | 亚洲一区二区三区免费视频| 日本精品3d动漫一区二区| 亚洲一区二区三区高清视频| 爱爱帝国亚洲一区二区三区| 精品视频一区二区三三区四区| 精品一区二区三区色花堂| 日韩a无吗一区二区三区| 韩国精品一区视频在线播放| 伊人久久大香线蕉AV一区二区| 亚洲一区中文字幕久久| 亚洲国产精品一区第二页| 精品一区二区久久久久久久网站| 精品国产亚洲一区二区在线观看 | 99久久精品国产高清一区二区| 免费观看日本污污ww网站一区| 乱码人妻一区二区三区| 精品国产福利在线观看一区| 3D动漫精品一区二区三区| 亚洲视频一区在线| 亚洲综合色一区二区三区| 国产精品久久久久久麻豆一区| 久久久国产精品亚洲一区| 奇米精品视频一区二区三区| 亚洲一区在线视频观看| 国产精品亚洲一区二区麻豆| 日本一区频道在线视频| 伊人久久精品无码麻豆一区| 国产精品成人一区无码| 亚洲第一区精品观看| 国产一区二区三区夜色| 亚洲av午夜福利精品一区人妖| 色狠狠一区二区三区香蕉|