中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-09-07 08:15:27 來源:腳本之家 閱讀:1030 作者:qq_610642 欄目:編程語言

1、使用QChartView來縮放

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

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

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

2、使用Qchart來平移和縮放

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

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

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

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

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

原理就是,通過設置X/Y軸的范圍來實現平移和縮放。

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

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

示例代碼:

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(為什么+代表左移?仔細想想就明白了)

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

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

運行效果如下:

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()); // 設置比例
 // 1. 讀取視圖基本信息
 QRectF oPlotAreaRect = this->chart()->plotArea();
 QPointF oCenterPoint = oPlotAreaRect.center();
 // 2. 水平調整
 oPlotAreaRect.setWidth(oPlotAreaRect.width() * rVal);
 // 3. 豎直調整
 oPlotAreaRect.setHeight(oPlotAreaRect.height() * rVal);
 // 4.1 計算視點,視點不變,圍繞中心縮放
 //QPointF oNewCenterPoint(oCenterPoint);
 // 4.2 計算視點,讓鼠標點擊的位置移動到窗口中心
 //QPointF oNewCenterPoint(pEvent->pos());
 // 4.3 計算視點,讓鼠標點擊的位置盡量保持不動(等比換算,存在一點誤差)
 QPointF oNewCenterPoint(2 * oCenterPoint - pEvent->pos() - (oCenterPoint - pEvent->pos()) / rVal);
 // 5. 設置視點
 oPlotAreaRect.moveCenter(oNewCenterPoint);
 // 6. 提交縮放調整
 this->chart()->zoomIn(oPlotAreaRect);
 __super::wheelEvent(pEvent);
}

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

根河市| 武强县| 大足县| 星子县| 新龙县| 高雄市| 开平市| 吉隆县| 虞城县| 龙南县| 望江县| 松原市| 张家川| 潞城市| 宣汉县| 庄浪县| 绩溪县| 乳源| 新邵县| 高邮市| 石嘴山市| 乐昌市| 平陆县| 隆回县| 广东省| 正宁县| 格尔木市| 普兰店市| 鄱阳县| 溧阳市| 慈溪市| 屯留县| 贵德县| 温泉县| 左贡县| 双峰县| 商丘市| 武乡县| 旬邑县| 新密市| 长治市|