1. 程式人生 > >Qwt中的滑鼠操作之縮放、平移

Qwt中的滑鼠操作之縮放、平移

       由於專案需要繪圖,所以採取了Qwt作為Qt外掛,進行圖形的繪製。Qwt的安裝前面的博文已經解決。

       使用Qwt在Qt上繪製圖形,需要用到縮放、平移等操作,通過檢視Qwt自帶的例子看到了如下語句:

#include<qwt_plot_zoomer.h>
#include<qwt_plot_panner.h>
#include<qwt_plot_magnifier.h>
 
 QwtPlotZoomer*zoomer=newQwtPlotZoomer(canvas);//選擇圖形區域性放大
zoomer->setRubberBandPen(QColor
(Qt::blue));//勾選擴大區域邊界顏色
zoomer->setMousePattern(QwtEventPattern::MouseSelect2,Qt::RightButton,Qt::ControlModifier);//ctrl+右鍵==回覆到原始狀態
 zoomer->setMousePattern(QwtEventPattern::MouseSelect3,Qt::RightButton);//右鍵==恢復到上一次擴大之前的狀態
 QwtPlotPanner*panner=newQwtPlotPanner(canvas);//預設的左鍵移動功能
panner->setMouseButton(Qt
::RightButton);//設定哪個按鈕移動畫布如果不設定(註冊掉當前行)按鈕預設為左鍵為移動
QwtPlotMagnifiermagnifier=newQwtPlotMagnifier(canvas);//預設的滑輪及右鍵縮放功能  圖形的整體縮放
magnifier->setMouseButton(Qt::LeftButton);//設定哪個按鈕與滑輪為縮放畫布如果不設定(註冊掉當前行)按鈕預設為滑輪以及右鍵為縮放

       對於移動以及圖形的整體縮放,通過void setMouseButton( Qt::MouseButton, Qt::KeyboardModifiers = Qt::NoModifier );

便能修改自己對應功能的按鈕。

       對於圖形區域性放大,也是通過設定setMouseButton,但是引數有所不同,void setMousePattern( MousePatternCode, Qt::MouseButton

 button, Qt::KeyboardModifiers = Qt::NoModifier );對於第一個引數,由對應的文件可知,有MousePatternCode是列舉型,有7個可選值,其中6個

MouseSelect1-6,是設定滑鼠模型值。Qwt例子中區域性放大(左鍵放大,右鍵還原上一級圖形,ctrl+右鍵還原原始圖形),是通過設定2,3.。具體的含義

可能由於自己英文水平有限,在文件中沒有找到,採用了最笨的方法進行了測試,得到1-3對應的功能,但是4-6卻沒有能夠知道其作用,如果有知道的

朋友,麻煩告訴一下,在此先謝過。

模式一 //預設右鍵恢復原樣···放大的方式可以自定義

zoomer->setMousePattern(QwtEventPattern::MouseSelect1,Qt::LeftButton,Qt::ControlModifier);//crtl+左鍵放大右鍵恢復原樣
zoomer->setMousePattern(QwtEventPattern::MouseSelect1,Qt::RightButton,Qt::ControlModifier);//ctrl+右鍵放大右鍵恢復原樣
zoomer->setMousePattern(QwtEventPattern::MouseSelect1,Qt::LeftButton);//左鍵放大右鍵恢復原樣
zoomer->setMousePattern(QwtEventPattern::MouseSelect1,Qt::RightButton);//右鍵放大與恢復重疊不推薦使用
 
模式二 //預設左鍵放大···恢復原樣的方式可以自定義
zoomer->setMousePattern(QwtEventPattern::MouseSelect2,Qt::LeftButton,Qt::ControlModifier);//左鍵放大ctrl+左鍵恢復
zoomer->setMousePattern(QwtEventPattern::MouseSelect2,Qt::RightButton,Qt::ControlModifier);//左鍵放大ctrl+右鍵恢復原樣
zoomer->setMousePattern(QwtEventPattern::MouseSelect2,Qt::LeftButton);//左鍵放大與左鍵恢復重疊不推薦使用
zoomer->setMousePattern(QwtEventPattern::MouseSelect2,Qt::RightButton);//左鍵放大右鍵恢復原樣


模式三 //預設左鍵放大、右鍵恢復原樣···恢復上一級原樣可以自方式定義
zoomer->setMousePattern(QwtEventPattern::MouseSelect3,Qt::LeftButton,Qt::ControlModifier);//左鍵放大右鍵恢復原樣ctrl+左鍵恢復上一級原樣
zoomer->setMousePattern(QwtEventPattern::MouseSelect3,Qt::RightButton,Qt::ControlModifier);//左鍵放大右鍵恢復原樣ctrl+右鍵恢復上一級原樣
zoomer->setMousePattern(QwtEventPattern::MouseSelect3,Qt::LeftButton);//左鍵放大與左鍵恢復重疊不推薦使用
zoomer->setMousePattern(QwtEventPattern::MouseSelect3,Qt::RightButton);//左鍵放大右鍵恢復原樣與恢復上一級原樣重疊·右鍵恢復原樣覆蓋恢復上一級原樣


 QWT中例子 左鍵放大,右鍵恢復上一級,ctrl+原樣恢復原樣
zoomer->setMousePattern(QwtEventPattern::MouseSelect2,Qt::RightButton,Qt::ControlModifier);
 zoomer->setMousePattern(QwtEventPattern::MouseSelect3,Qt::RightButton);

是一種結合的方式···使用模式2自定義恢復原樣的方式,覆蓋了預設的右鍵,然後又用模式3自定義右鍵為恢復上一級模式的方

式,所以在實際繪圖的時候,針對區域性放大時,可以根據自己的需要進行修改。