最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Qt圖形圖像開發(fā)曲線圖表模塊QChart庫縮放/平移詳細(xì)方法與實例

 更新時間:2020年03月11日 15:54:39   作者:qq_610642  
這篇文章主要介紹了Qt圖形圖像開發(fā)曲線圖表模塊QChart庫縮放/平移詳細(xì)方法與實例,需要的朋友可以參考下

1、使用QChartView來縮放

(1)用鼠標(biāo)框選一個矩形,把圖放大到這個矩形

QChartView::setRubberBand(QChartView::RectangleRubberBand);//XY方向同時放大到鼠標(biāo)畫出的矩形大小(也可以設(shè)置為只放大X軸或Y軸)

(2)setRubberBand函數(shù)同時也能使鼠標(biāo)右鍵,具備縮小圖的功能。

2、使用Qchart來平移和縮放

QChart::scroll(-10, 5);//整體平移(-10, 5),兩個參數(shù)分別為Δx和Δy

QChart::zoomIn(x,y,width,height);//縮放到指定的矩形

QChart::zoom(0.9)  //整體縮放,參數(shù)為放縮系數(shù),<1代表縮小,>1代表放大

QChart::zoomReset()  //把所有做過的zoomIn、zoomOut、zoom全部撤銷

3、使用QValueAxis或者QDateTimeAxis來平移和縮放

原理就是,通過設(shè)置X/Y軸的范圍來實現(xiàn)平移和縮放。

例如,當(dāng)前顯示X的顯示范圍為[20, 50],如果我們把X軸的顯示范圍擴大到[0, 80],這樣做的效果就是顯示的圖形變小了,也就實現(xiàn)了縮放。

例如,當(dāng)前顯示X的顯示范圍為[0, 30],如果我們把X軸的顯示范圍擴大到[10, 40],這樣做的效果就是顯示的圖形左移了,也就實現(xiàn)了平移。

示例代碼:

QValueAxis *axisX = dynamic_cast<QValueAxis*>(Chart->axisX(pLineSeries));//

qreal cur_x_min = axisX->min();

qreal cur_x_max = axisX->max();

axisX->setRange(cur_x_min + 20, cur_x_max + 20);//圖形向左平移20(為什么+代表左移?仔細(xì)想想就明白了)

放縮與平移的示例代碼同理

Qt曲線圖表模塊QChart庫縮放、平移實例

運行效果如下:

.h文件代碼

#ifndef QTCHARTDEMOZOOM_H_38020FA5_FC74_4395_A807_61BF924D2F06
#define QTCHARTDEMOZOOM_H_38020FA5_FC74_4395_A807_61BF924D2F06
#include <QtCharts/QChartView>
using namespace QtCharts;
class QtChartDemoZoom : public QChartView
{
 Q_OBJECT
public:
 QtChartDemoZoom(QWidget* pParent = nullptr);
 ~QtChartDemoZoom();
protected:
 virtual void mouseMoveEvent(QMouseEvent *pEvent) override;
 virtual void mousePressEvent(QMouseEvent *pEvent) override;
 virtual void mouseReleaseEvent(QMouseEvent *pEvent) override;
 virtual void wheelEvent(QWheelEvent *pEvent) override;
private:
 bool m_bMiddleButtonPressed;
 QPoint m_oPrePos;
};
#endif //QTCHARTDEMOZOOM_H_38020FA5_FC74_4395_A807_61BF924D2F06

.cpp文件代碼

#include <QLineSeries>
QtChartDemoZoom::QtChartDemoZoom(QWidget* pParent /*= nullptr*/)
 : QChartView(pParent)
 , m_bMiddleButtonPressed(false)
 , m_oPrePos(0, 0)
{
 QLineSeries *pLineServies = new QLineSeries();
 for (int i = 0; i < 100; ++i)
 {
 pLineServies->append(i, qrand() % 10);
 }
 this->chart()->addSeries(pLineServies);
 this->chart()->createDefaultAxes();
}
 QtChartDemoZoom::~QtChartDemoZoom()
{
}
void QtChartDemoZoom::mouseMoveEvent(QMouseEvent *pEvent)
{
 if (m_bMiddleButtonPressed)
 {
 QPoint oDeltaPos = pEvent->pos() - m_oPrePos;
 this->chart()->scroll(-oDeltaPos.x(), oDeltaPos.y());
 m_oPrePos = pEvent->pos();
 }
 __super::mouseMoveEvent(pEvent);
}
void QtChartDemoZoom::mousePressEvent(QMouseEvent *pEvent)
{
 if (pEvent->button() == Qt::MiddleButton)
 {
 m_bMiddleButtonPressed = true;
 m_oPrePos = pEvent->pos();
 this->setCursor(Qt::OpenHandCursor);
 }
 __super::mousePressEvent(pEvent);
}
void QtChartDemoZoom::mouseReleaseEvent(QMouseEvent *pEvent)
{
 if (pEvent->button() == Qt::MiddleButton)
 {
 m_bMiddleButtonPressed = false;
 this->setCursor(Qt::ArrowCursor);
 }
 __super::mouseReleaseEvent(pEvent);
}
void QtChartDemoZoom::wheelEvent(QWheelEvent *pEvent)
{
 qreal rVal = std::pow(0.999, pEvent->delta()); // 設(shè)置比例
 // 1. 讀取視圖基本信息
 QRectF oPlotAreaRect = this->chart()->plotArea();
 QPointF oCenterPoint = oPlotAreaRect.center();
 // 2. 水平調(diào)整
 oPlotAreaRect.setWidth(oPlotAreaRect.width() * rVal);
 // 3. 豎直調(diào)整
 oPlotAreaRect.setHeight(oPlotAreaRect.height() * rVal);
 // 4.1 計算視點,視點不變,圍繞中心縮放
 //QPointF oNewCenterPoint(oCenterPoint);
 // 4.2 計算視點,讓鼠標(biāo)點擊的位置移動到窗口中心
 //QPointF oNewCenterPoint(pEvent->pos());
 // 4.3 計算視點,讓鼠標(biāo)點擊的位置盡量保持不動(等比換算,存在一點誤差)
 QPointF oNewCenterPoint(2 * oCenterPoint - pEvent->pos() - (oCenterPoint - pEvent->pos()) / rVal);
 // 5. 設(shè)置視點
 oPlotAreaRect.moveCenter(oNewCenterPoint);
 // 6. 提交縮放調(diào)整
 this->chart()->zoomIn(oPlotAreaRect);
 __super::wheelEvent(pEvent);
}

本文講解了Qt曲線圖表模塊QChart庫縮放/平移詳細(xì)方法與實例,更多關(guān)于Qt曲線圖表模塊QChart庫的知識請查看下面的相關(guān)鏈接

相關(guān)文章

  • C++實現(xiàn)LeetCode( 69.求平方根)

    C++實現(xiàn)LeetCode( 69.求平方根)

    這篇文章主要介紹了C++實現(xiàn)LeetCode( 69.求平方根),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C語言排序算法之冒泡排序?qū)崿F(xiàn)方法【改進(jìn)版】

    C語言排序算法之冒泡排序?qū)崿F(xiàn)方法【改進(jìn)版】

    這篇文章主要介紹了C語言排序算法之冒泡排序?qū)崿F(xiàn)方法,結(jié)合具體實例形式分析了C語言實現(xiàn)的基本冒泡排序?qū)崿F(xiàn)方法及增設(shè)flag標(biāo)志位的改進(jìn)型算法,需要的朋友可以參考下
    2017-09-09
  • C++私有繼承(二)

    C++私有繼承(二)

    這篇文章主要介紹了C++私有繼承,在私有繼承時,基類的公有對象以及保護對象會變成派生類的私有對象。我們可以在派生類方法當(dāng)中使用它,但無法通過派生類對象直接調(diào)用,但無法訪問基類的私有方法和對象,下面具體內(nèi)容,需要的朋友可以參考一下
    2022-01-01
  • C++實現(xiàn)LeetCode(99.復(fù)原二叉搜索樹)

    C++實現(xiàn)LeetCode(99.復(fù)原二叉搜索樹)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(99.復(fù)原二叉搜索樹),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 使用Qt封裝一個發(fā)送http請求通用類

    使用Qt封裝一個發(fā)送http請求通用類

    這篇文章主要為大家詳細(xì)介紹了如何使用Qt封裝一個通用類,可以通過QNetworkRequest和QNetworkReply進(jìn)行http請求,感興趣的可以了解一下
    2024-12-12
  • C++?QT實現(xiàn)文件壓縮和解壓縮操作

    C++?QT實現(xiàn)文件壓縮和解壓縮操作

    這篇文章主要為大家詳細(xì)介紹了C++?QT如何實現(xiàn)壓縮文件、文件夾和解壓縮的操作,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下
    2022-11-11
  • C程序讀取鍵盤碼的方法

    C程序讀取鍵盤碼的方法

    這篇文章主要介紹了C程序讀取鍵盤碼的方法,運行時可通過鍵盤按鍵獲取其對應(yīng)的鍵盤碼,文章最后附帶了鍵盤碼與按鍵的對照表,需要的朋友可以參考下
    2014-09-09
  • Linux系統(tǒng)中C語言編程創(chuàng)建函數(shù)fork()執(zhí)行解析

    Linux系統(tǒng)中C語言編程創(chuàng)建函數(shù)fork()執(zhí)行解析

    最近在看進(jìn)程間的通信,看到了fork()函數(shù),雖然以前用過,這次經(jīng)過思考加深了理解?,F(xiàn)總結(jié)如下
    2013-04-04
  • 淺談Linux環(huán)境下并發(fā)編程中C語言fork()函數(shù)的使用

    淺談Linux環(huán)境下并發(fā)編程中C語言fork()函數(shù)的使用

    fork函數(shù)在Linux中可以創(chuàng)建子進(jìn)程即一個新的進(jìn)程,這里我們根據(jù)實例來淺談Linux環(huán)境下并發(fā)編程中C語言fork()函數(shù)的使用,需要的朋友可以參考下
    2016-06-06
  • OpenCV reshape函數(shù)實現(xiàn)矩陣元素序列化

    OpenCV reshape函數(shù)實現(xiàn)矩陣元素序列化

    reshape函數(shù)是OpenCV中一個很有用的函數(shù),不僅可以改變矩陣的通道數(shù),還可以對矩陣元素進(jìn)行序列化。本文將主要介紹如何通過reshape實現(xiàn)矩陣元素序列化,需要的小伙伴可以參考一下
    2021-12-12

最新評論

犍为县| 淄博市| 乌鲁木齐市| 永吉县| 台北县| 荆门市| 皋兰县| 翁牛特旗| 巴中市| 乌鲁木齐市| 宁阳县| 长武县| 南京市| 高唐县| 蒲江县| 出国| 宜兴市| 康平县| 白银市| 沈阳市| 汉沽区| 淮安市| 吉安市| 大余县| 繁昌县| 汪清县| 于都县| 湘潭市| 金溪县| 报价| 金山区| 中阳县| 历史| 呈贡县| 巫溪县| 桓台县| 清河县| 韩城市| 兰考县| 高淳县| 林周县|