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

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

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

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

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

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

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

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

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

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

自定以一個MyChartView,繼承自QChartView。增加一個信號:

signals:
    void sgl_recoverRange(MyChartView *p);

需要在自定義的MyChartView中區(qū)分出來是否是鼠標(biāo)左鍵的單擊事件還是鼠標(biāo)左鍵的拖動。這里巧妙實現(xiàn)了下。原理很簡單,如果是鼠標(biāo)拖動的話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);
}

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

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

在槽函數(shù)中對縮放和放大功能進(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 是一個基于Qt的畫圖和數(shù)據(jù)可視化C++控件。QCustomPlot 致力于提供美觀的界面,高質(zhì)量的2D畫圖、圖畫和圖表,同時為實時數(shù)據(jù)可視化應(yīng)用提供良好的解決方案。 該繪圖庫專注于制作美觀、出版物質(zhì)量高的2D繪圖、圖形和圖表,并為實時可視化應(yīng)用程序提供高性能。

QCustomPlot的下載與安裝

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

QCustomPlot的使用

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

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

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

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

使用示例

void OneGraph::OneGraph_Drawing(QCustomPlot *customPlot)
{
    // 將數(shù)據(jù)用曲線實時顯示
    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
    }
 
    // 添加一個曲線圖QGraph,
    customPlot->addGraph();
    customPlot->graph(0)->setData(x,y);//為坐標(biāo)軸添加數(shù)據(jù)
    customPlot->graph(0)->setName("示例1:繪制一個曲線");// 設(shè)置曲線圖的名字
 
    // 如果需要添加多個曲線,就需要多次調(diào)用addGraph()函數(shù)
//    customPlot->addGraph();
//    customPlot->graph(1)->setData("x軸數(shù)據(jù)","y軸數(shù)據(jù)");
//    customPlot->graph(1)->setName("示例1:繪制第二個一個曲線");
 
    // 設(shè)置圖表標(biāo)題
    QCPTextElement *title = new QCPTextElement(customPlot,"標(biāo)題:繪制一個曲線",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);//背景顏色起始點,從圖左上角開始,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)主刻度線的長度
    customPlot->xAxis->setTickLengthOut(15);// 軸線外主刻度線的長度
    customPlot->xAxis->setSubTickPen(QPen(QColor(220,20,60),1));//粉紅色,x軸線上的子刻度線(有數(shù)字的刻度線)的畫筆顏色和粗細(xì)
    customPlot->xAxis->setLabelColor(Qt::red);// 只有設(shè)置了標(biāo)簽,軸標(biāo)簽的顏色才會顯示
    customPlot->xAxis->setUpperEnding(QCPLineEnding::esSpikeArrow);// 設(shè)置軸線結(jié)束時的風(fēng)格為 實角三角形但內(nèi)部有凹陷的形狀
    customPlot->xAxis->setLowerEnding(QCPLineEnding::esDisc);//setLowerEnding設(shè)置軸線開始時的風(fēng)格
 
    //設(shè)置QCPGrid網(wǎng)格的風(fēng)格,每條網(wǎng)格對應(yīng)一個刻度
    customPlot->xAxis->grid()->setPen(QPen(QColor(255,0,255),1,Qt::SolidLine));//實線
    customPlot->yAxis->grid()->setPen(QPen(QColor(255,0,255),2,Qt::DotLine));//點線
    customPlot->xAxis->grid()->setSubGridPen(QPen(QColor(80, 80, 80), 1, Qt::DotLine)); // 子網(wǎng)格線(對應(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時的網(wǎng)格線的畫筆
    customPlot->yAxis->grid()->setZeroLinePen(QPen(Qt::black,3));
 
    customPlot->legend->setVisible(true);// 顯示圖例:曲線顏色和曲線名,一般在右上角,可以設(shè)置
 
//    customPlot->replot();重繪
}

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

    匯編語言常見錯誤信息中文注解

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

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

    本文主要介紹了C++?QT?QThread啟動、停止、暫停和恢復(fù)的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(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ì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • C語言通訊錄管理系統(tǒng)完整代碼

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

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

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

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

最新評論

深州市| 威远县| 阿合奇县| 石林| 井研县| 景德镇市| 南江县| 兴国县| 长治市| 渭南市| 四川省| 梁山县| 锦屏县| 梅河口市| 苗栗县| 咸宁市| 阳原县| 高要市| 广南县| 尚志市| 兴城市| 康定县| 大兴区| 辽阳市| 江陵县| 岗巴县| 固安县| 博客| 正镶白旗| 谷城县| 合山市| 广州市| 贵州省| 共和县| 浮山县| 吐鲁番市| 清苑县| 侯马市| 台东县| 玉田县| 沁水县|