欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

1、使用QChartView來縮放

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

QChartView::setRubberBand(QChartView::RectangleRubberBand);//XY方向同時放大到鼠標(biāo)畫出的矩形大?。ㄒ部梢栽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軸的范圍來實(shí)現(xiàn)平移和縮放。

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

例如,當(dāng)前顯示X的顯示范圍為[0, 30],如果我們把X軸的顯示范圍擴(kuò)大到[10, 40],這樣做的效果就是顯示的圖形左移了,也就實(shí)現(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庫縮放、平移實(shí)例

運(yùn)行效果如下:

.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 計算視點(diǎn),視點(diǎn)不變,圍繞中心縮放
 //QPointF oNewCenterPoint(oCenterPoint);
 // 4.2 計算視點(diǎn),讓鼠標(biāo)點(diǎn)擊的位置移動到窗口中心
 //QPointF oNewCenterPoint(pEvent->pos());
 // 4.3 計算視點(diǎn),讓鼠標(biāo)點(diǎn)擊的位置盡量保持不動(等比換算,存在一點(diǎn)誤差)
 QPointF oNewCenterPoint(2 * oCenterPoint - pEvent->pos() - (oCenterPoint - pEvent->pos()) / rVal);
 // 5. 設(shè)置視點(diǎn)
 oPlotAreaRect.moveCenter(oNewCenterPoint);
 // 6. 提交縮放調(diào)整
 this->chart()->zoomIn(oPlotAreaRect);
 __super::wheelEvent(pEvent);
}

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

相關(guān)文章

  • C語言樹與二叉樹基礎(chǔ)全刨析

    C語言樹與二叉樹基礎(chǔ)全刨析

    二叉樹可以簡單理解為對于一個節(jié)點(diǎn)來說,最多擁有一個上級節(jié)點(diǎn),同時最多具備左右兩個下級節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)。本文將詳細(xì)介紹一下C中二叉樹與樹的概念和結(jié)構(gòu),需要的可以參考一下
    2022-04-04
  • C/C++實(shí)現(xiàn)7bit與8bit編碼互相轉(zhuǎn)換

    C/C++實(shí)現(xiàn)7bit與8bit編碼互相轉(zhuǎn)換

    這篇文章主要為大家詳細(xì)介紹了如何使用C/C++實(shí)現(xiàn)7bit與8bit編碼互相轉(zhuǎn)換功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-10-10
  • C++中4種類型轉(zhuǎn)換方式 cast操作詳解

    C++中4種類型轉(zhuǎn)換方式 cast操作詳解

    static_cast,支持子類指針到父類指針的轉(zhuǎn)換,并根據(jù)實(shí)際情況調(diào)整指針的值,反過來也支持,但會給出編譯警告,它作用最類似C風(fēng)格的“強(qiáng)制轉(zhuǎn)換”,一般來說可認(rèn)為它是安全的
    2013-10-10
  • QT網(wǎng)絡(luò)編程UDP下C/S架構(gòu)廣播通信(實(shí)例講解)

    QT網(wǎng)絡(luò)編程UDP下C/S架構(gòu)廣播通信(實(shí)例講解)

    下面小編就為大家?guī)硪黄猀T網(wǎng)絡(luò)編程UDP下C/S架構(gòu)廣播通信(實(shí)例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • c++之解決char轉(zhuǎn)string時出現(xiàn)的亂碼問題

    c++之解決char轉(zhuǎn)string時出現(xiàn)的亂碼問題

    這篇文章主要介紹了c++之解決char轉(zhuǎn)string時出現(xiàn)的亂碼問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C++實(shí)現(xiàn)藍(lán)橋杯競賽題目---搭積木

    C++實(shí)現(xiàn)藍(lán)橋杯競賽題目---搭積木

    這篇文章主要介紹了C++實(shí)現(xiàn)藍(lán)橋杯競賽題目---搭積木,本篇文章通過題目分析列舉公式進(jìn)行分析算法,包含詳細(xì)的圖文,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++Fstream文件流與freopen重定向操作教程

    C++Fstream文件流與freopen重定向操作教程

    這篇文章主要介紹了C++Fstream文件流與freopen重定向教程,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • 淺談C++中const與constexpr的區(qū)別

    淺談C++中const與constexpr的區(qū)別

    C++11中新增加了用于指示常量表達(dá)式的constexpr關(guān)鍵字。本文將帶大家詳細(xì)了解一下const與constexpr之間的區(qū)別,需要的小伙伴們可以參考一下
    2021-11-11
  • Windows下Qt讀取系統(tǒng)的內(nèi)存、CPU、GPU等使用信息的示例代碼

    Windows下Qt讀取系統(tǒng)的內(nèi)存、CPU、GPU等使用信息的示例代碼

    在當(dāng)今計算機(jī)應(yīng)用廣泛的領(lǐng)域中,了解系統(tǒng)的內(nèi)存、CPU和GPU使用情況是非常重要的,本文將介紹如何使用Qt和Windows API來讀取系統(tǒng)的內(nèi)存、CPU和GPU使用詳細(xì)信息,將提供一個完整的示例代碼,需要的朋友可以參考下
    2024-01-01
  • C++中virtual繼承的深入理解

    C++中virtual繼承的深入理解

    本篇文章是對C++中的virtual繼承進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05

最新評論