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

使用Qt的QChartView實(shí)現(xiàn)縮放和放大功能

 更新時(shí)間:2022年09月19日 15:45:48   作者:特立獨(dú)行的貓a  
QCustomPlot是一個(gè)小型的Qt畫圖標(biāo)類,支持繪制靜態(tài)曲線、動(dòng)態(tài)曲線、多重坐標(biāo)曲線,柱狀圖,蠟燭圖,這篇文章主要介紹了Qt的QChartView實(shí)現(xiàn)縮放和放大功能,需要的朋友可以參考下

Qt的常用圖表方式Qwt、QChart、QCustomPlot等。QCharts是官方的,功能強(qiáng)大些。QCustomPlot是一個(gè)小型的Qt畫圖標(biāo)類,支持繪制靜態(tài)曲線、動(dòng)態(tài)曲線、多重坐標(biāo)曲線,柱狀圖,蠟燭圖等。QCustomPlot比Qchat簡(jiǎn)單好用些。

這里介紹下QChartView縮放和放大功能的實(shí)現(xiàn)。 

這里介紹下QChartView縮放和放大功能的實(shí)現(xiàn)。

QChartView開啟鼠標(biāo)拖動(dòng)放大功能:

ui->wdChart->setRubberBand(QChartView::RectangleRubberBand);

開啟后,拖動(dòng)鼠標(biāo)區(qū)域自動(dòng)放大,鼠標(biāo)右鍵點(diǎn)擊自動(dòng)縮小。

恢復(fù)的話重新設(shè)置下軸的最大最小范圍setRange即可。這里介紹下鼠標(biāo)左鍵單擊實(shí)現(xiàn)恢復(fù)的辦法:

自定以一個(gè)MyChartView,繼承自QChartView。增加一個(gè)信號(hào):

signals:
    void sgl_recoverRange(MyChartView *p);

需要在自定義的MyChartView中區(qū)分出來是否是鼠標(biāo)左鍵的單擊事件還是鼠標(biāo)左鍵的拖動(dòng)。這里巧妙實(shí)現(xiàn)了下。原理很簡(jiǎn)單,如果是鼠標(biāo)拖動(dòng)的話mouseMoveEvent中把is_Pressed_清掉。

#include "mychartview.h"
 
MyChartView::MyChartView(QWidget *parent):QChartView(parent)
{
    is_Pressed_ = false;
}
 
void MyChartView::mouseMoveEvent(QMouseEvent *event)
{
    is_Pressed_ = false;
    QChartView::mouseMoveEvent(event);
}
 
void MyChartView::mouseReleaseEvent(QMouseEvent *event)
{
    if(event->button() == Qt::LeftButton){
        if(is_Pressed_){
            is_Pressed_ = false;
            // 單擊鼠標(biāo)恢復(fù)縮放
            emit sgl_recoverRange(this);
        }
    }
    QChartView::mouseReleaseEvent(event);
}
 
void MyChartView::mousePressEvent(QMouseEvent *event)
{
    is_Pressed_ = true;
    QChartView::mousePressEvent(event);
}

綁定信號(hào)和槽函數(shù):

connect(ui->wdChart,&MyChartView::sgl_recoverRange,
         this,&MainWindow::slot_recoverChartRange);
m_tooltip = new Callout(myChart);

在槽函數(shù)中對(duì)縮放和放大功能進(jìn)行恢復(fù)處理,重新設(shè)置range.

void MainWindow::slot_recoverChartRange()
{
    qDebug() << "slot_recoverChartRange";
    int maxVal = 0;
    if(mTbData.recList.size() == 0){
        mAxisY->setRange(0,12);
        mAxisY1->setRange(0,12);
        mAxisX->setRange(0,10);    
        return;
    }
}

更好用的QCustomPlot

QCustomPlot介紹

QCustomPlot 是一個(gè)基于Qt的畫圖和數(shù)據(jù)可視化C++控件。QCustomPlot 致力于提供美觀的界面,高質(zhì)量的2D畫圖、圖畫和圖表,同時(shí)為實(shí)時(shí)數(shù)據(jù)可視化應(yīng)用提供良好的解決方案。 該繪圖庫專注于制作美觀、出版物質(zhì)量高的2D繪圖、圖形和圖表,并為實(shí)時(shí)可視化應(yīng)用程序提供高性能。

QCustomPlot的下載與安裝

QCustomPlot官網(wǎng)鏈接:Qt Plotting Widget QCustomPlot - Introduction
下載鏈接:Qt Plotting Widget QCustomPlot - Download

QCustomPlot的使用

QCustomPlot 是一個(gè)超強(qiáng)超小巧的qt繪圖類,非常漂亮,非常易用。只需要把下載下來的qcustomplot.h和qcustomplot.cpp文件加入項(xiàng)目工程即可使用,遠(yuǎn)比qwt方便和漂亮,可以自己使用兩個(gè)源文件也可以自己編譯成庫文件,非常方便。

把qcustomplot.cpp和qcustomplot.h拷貝到工程目錄下,在項(xiàng)目中點(diǎn)右鍵添加現(xiàn)有文件,把兩個(gè)文件加入工程。

這時(shí)pro文件會(huì)添加上qcustomplot.cpp和qcustomplot.h,如果Qt版本在5.0以上,需要在.pro文件中的QT變量加上printsupport,QT += printsupport。

界面上拖上去一個(gè)widget控件,然后使一個(gè)widget提升為QCustomPlot類,即可使用。

使用示例

void OneGraph::OneGraph_Drawing(QCustomPlot *customPlot)
{
    // 將數(shù)據(jù)用曲線實(shí)時(shí)顯示
    QVector<double> x(101),y(101);// x軸數(shù)據(jù),y軸數(shù)據(jù)
 
    for(int i = 0; i < 101;i++)
    {
        x[i] = i / 50.0 - 1;// x軸數(shù)據(jù)范圍:-1 ~ 1
        y[i] = x[i] * x[i];// y軸數(shù)據(jù)范圍:0 ~ 1
    }
 
    // 添加一個(gè)曲線圖QGraph,
    customPlot->addGraph();
    customPlot->graph(0)->setData(x,y);//為坐標(biāo)軸添加數(shù)據(jù)
    customPlot->graph(0)->setName("示例1:繪制一個(gè)曲線");// 設(shè)置曲線圖的名字
 
    // 如果需要添加多個(gè)曲線,就需要多次調(diào)用addGraph()函數(shù)
//    customPlot->addGraph();
//    customPlot->graph(1)->setData("x軸數(shù)據(jù)","y軸數(shù)據(jù)");
//    customPlot->graph(1)->setName("示例1:繪制第二個(gè)一個(gè)曲線");
 
    // 設(shè)置圖表標(biāo)題
    QCPTextElement *title = new QCPTextElement(customPlot,"標(biāo)題:繪制一個(gè)曲線",QFont("sans",10,QFont::Bold));
    title->setTextColor(Qt::green);
    title->setMargins(QMargins(0,6,0,10));
    // 在第一行第一列添加標(biāo)題
    customPlot->plotLayout()->insertRow(0);// 插入一行
    customPlot->plotLayout()->addElement(0, 0, title);
 
    //為圖例添加標(biāo)題
    QCPTextElement *legend_title = new QCPTextElement(customPlot,"這是圖例的標(biāo)題",QFont("sans",10,QFont::Bold));
    legend_title->setTextColor(Qt::red);
    legend_title->setMargins(QMargins(0,6,0,10));// 為了效果更好,添加一些邊距
    legend_title->setLayer("legend");// 一定要把標(biāo)題的層設(shè)置為legend層
    customPlot->legend->insertRow(0);// 插入一行
    customPlot->legend->addElement(0,0,legend_title);// 在第一行第一列添加標(biāo)題
 
    // x軸設(shè)置屬性
    customPlot->xAxis->setLabel("x軸數(shù)據(jù)");// 設(shè)置x軸的標(biāo)簽
    customPlot->xAxis->setRange(-1,1);// 設(shè)置x軸的范圍為(-1,1)
    customPlot->xAxis->setPadding(30);//設(shè)置外邊距,數(shù)值可以改大或者改小來觀察效果
    customPlot->xAxis->setLabelPadding(20);//設(shè)置標(biāo)簽內(nèi)邊距
    customPlot->xAxis->setTickLabelPadding(10);
 
    // y軸設(shè)置屬性
    customPlot->yAxis->setLabel("y軸數(shù)據(jù)");
    customPlot->yAxis->setRange(-1,1);
    customPlot->yAxis->setPadding(10);
 
    //設(shè)置QCustomPlot的背景顏色
    QLinearGradient plotGradient;
    plotGradient.setStart(0,0);//背景顏色起始點(diǎn),從圖左上角開始,y方向0~400之間為紅色漸變,開始位置為紅色
    plotGradient.setFinalStop(0,400);//y方向 >400 為綠色漸變,結(jié)束位置為綠色
    plotGradient.setColorAt(0,QColor(200,200,200));//黑色,透明度從 0 ~ 1,
    plotGradient.setColorAt(1,QColor(120,120,120));
    customPlot->setBackground(plotGradient);
 
    //設(shè)置QCPAxisRect軸矩形的背景顏色
    QLinearGradient axisRectGradient;
    axisRectGradient.setStart(0,0);
    axisRectGradient.setFinalStop(0,350);
    axisRectGradient.setColorAt(0,QColor("#87CEFA"));//亮天藍(lán)色
    axisRectGradient.setColorAt(1,QColor("#FFB6C1"));//淺粉紅
    customPlot->axisRect()->setBackground(axisRectGradient);
 
    //設(shè)置QCPAxis軸的風(fēng)格
    customPlot->xAxis->setBasePen(QPen(Qt::white,2));// x軸線的畫筆顏色和粗細(xì)
    customPlot->xAxis->setTickPen(QPen(Qt::white,3));// x軸線上的主刻度線(有數(shù)字的刻度線)的畫筆顏色和粗細(xì)
    customPlot->xAxis->setTickLabelColor(Qt::green);// x軸線上的主刻度線下的文字顏色
    customPlot->xAxis->setTickLengthIn(6);// 軸線內(nèi)主刻度線的長(zhǎng)度
    customPlot->xAxis->setTickLengthOut(15);// 軸線外主刻度線的長(zhǎng)度
    customPlot->xAxis->setSubTickPen(QPen(QColor(220,20,60),1));//粉紅色,x軸線上的子刻度線(有數(shù)字的刻度線)的畫筆顏色和粗細(xì)
    customPlot->xAxis->setLabelColor(Qt::red);// 只有設(shè)置了標(biāo)簽,軸標(biāo)簽的顏色才會(huì)顯示
    customPlot->xAxis->setUpperEnding(QCPLineEnding::esSpikeArrow);// 設(shè)置軸線結(jié)束時(shí)的風(fēng)格為 實(shí)角三角形但內(nèi)部有凹陷的形狀
    customPlot->xAxis->setLowerEnding(QCPLineEnding::esDisc);//setLowerEnding設(shè)置軸線開始時(shí)的風(fēng)格
 
    //設(shè)置QCPGrid網(wǎng)格的風(fēng)格,每條網(wǎng)格對(duì)應(yīng)一個(gè)刻度
    customPlot->xAxis->grid()->setPen(QPen(QColor(255,0,255),1,Qt::SolidLine));//實(shí)線
    customPlot->yAxis->grid()->setPen(QPen(QColor(255,0,255),2,Qt::DotLine));//點(diǎn)線
    customPlot->xAxis->grid()->setSubGridPen(QPen(QColor(80, 80, 80), 1, Qt::DotLine)); // 子網(wǎng)格線(對(duì)應(yīng)子刻度)畫筆
    customPlot->yAxis->grid()->setSubGridPen(QPen(QColor(80, 80, 80), 1, Qt::SolidLine));//設(shè)置顏色后,需要顯示子網(wǎng)格線,才能看到效果
    customPlot->xAxis->grid()->setSubGridVisible(true);// 顯示子網(wǎng)格線
    customPlot->yAxis->grid()->setSubGridVisible(true);
    customPlot->xAxis->grid()->setZeroLinePen(QPen(Qt::black,3));// 設(shè)置刻度為0時(shí)的網(wǎng)格線的畫筆
    customPlot->yAxis->grid()->setZeroLinePen(QPen(Qt::black,3));
 
    customPlot->legend->setVisible(true);// 顯示圖例:曲線顏色和曲線名,一般在右上角,可以設(shè)置
 
//    customPlot->replot();重繪
}

到此這篇關(guān)于使用Qt的QChartView實(shí)現(xiàn)縮放和放大功能的文章就介紹到這了,更多相關(guān)Qt QChartView縮放和放大內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在matlab中實(shí)現(xiàn)for循環(huán)的方法

    在matlab中實(shí)現(xiàn)for循環(huán)的方法

    for循環(huán)用來循環(huán)處理數(shù)據(jù),break用于終止離它最近的一層for循環(huán),continue用于跳過離它最近的一層for循環(huán),接著執(zhí)行下一次循環(huán),本文重點(diǎn)給大家介紹在matlab中實(shí)現(xiàn)for循環(huán)的方法,感興趣的朋友一起看看吧
    2021-11-11
  • Qt xml操作的實(shí)現(xiàn)

    Qt xml操作的實(shí)現(xiàn)

    本文主要介紹Qt xml操作的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2008-08-08
  • C語言中數(shù)組的一些基本知識(shí)小結(jié)

    C語言中數(shù)組的一些基本知識(shí)小結(jié)

    這篇文章主要介紹了C語言中數(shù)組的一些基本知識(shí)小結(jié),其中重點(diǎn)是對(duì)于數(shù)組的內(nèi)存分配相關(guān)方面的知識(shí)整理,需要的朋友可以參考下
    2016-04-04
  • c++ 數(shù)組定義及初始化詳解

    c++ 數(shù)組定義及初始化詳解

    這篇文章主要介紹了c++ 數(shù)組定義及初始化詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • C語言循環(huán)結(jié)構(gòu)詳解

    C語言循環(huán)結(jié)構(gòu)詳解

    本文主要介紹C語言循環(huán)結(jié)構(gòu)的基礎(chǔ)知識(shí),這里整理了循環(huán)的基礎(chǔ)資料并附簡(jiǎn)單的代碼示例詳細(xì)講解,有需要的小伙伴可以參考下
    2021-10-10
  • 匯編語言常見錯(cuò)誤信息中文注解

    匯編語言常見錯(cuò)誤信息中文注解

    這篇文章主要介紹了匯編語言常見錯(cuò)誤信息中文注解,本文收集大部分匯編中常見錯(cuò)誤信息及對(duì)應(yīng)的中文注解,需要的朋友可以參考下
    2014-09-09
  • C++?QT?QThread啟動(dòng)、停止、暫停和恢復(fù)的實(shí)現(xiàn)

    C++?QT?QThread啟動(dòng)、停止、暫停和恢復(fù)的實(shí)現(xiàn)

    本文主要介紹了C++?QT?QThread啟動(dòng)、停止、暫停和恢復(fù)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • C語言中g(shù)etchar()的返回類型為什么是int詳解

    C語言中g(shù)etchar()的返回類型為什么是int詳解

    這篇文章主要給大家介紹了關(guān)于C語言中g(shù)etchar()的返回類型為什么是int的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • C語言通訊錄管理系統(tǒng)完整代碼

    C語言通訊錄管理系統(tǒng)完整代碼

    這篇文章主要為大家詳細(xì)介紹了C語言通訊錄管理系統(tǒng)完整代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C語言遞歸操作用法總結(jié)

    C語言遞歸操作用法總結(jié)

    這篇文章主要介紹了C語言遞歸操作用法,結(jié)合實(shí)例形式總結(jié)分析了C語言遞歸操作的原理、實(shí)現(xiàn)技巧與相關(guān)應(yīng)用,需要的朋友可以參考下
    2016-02-02

最新評(píng)論

方城县| 南郑县| 成武县| 泊头市| 独山县| 米泉市| 东山县| 新疆| 株洲市| 拜泉县| 慈利县| 得荣县| 青田县| 花莲县| 长汀县| 南木林县| 肥西县| 历史| 太康县| 清远市| 文成县| 蓝田县| 扎赉特旗| 罗定市| 平定县| 罗源县| 靖远县| 柯坪县| 突泉县| 璧山县| 清水县| 锦屏县| 玉门市| 屯门区| 文安县| 新和县| 枣庄市| 闽侯县| 南木林县| 柘城县| 德州市|