QT -- QChart的顯示


QChart的顯示需要用到QChartView,創建QChartView的步驟如下:

(1)在.pro文件中添加:QT       += charts。

(2)用到QChart的文件中添加:QT_CHARTS_USE_NAMESPACE,或者:using namespace QtCharts;

(3)在ui界面中拖入一個graphicsView(或)控件,然后右擊提升為QChartView類,如下圖,點擊添加,點擊提升;QChart的顯示容器創建完成。

QChart的兩種顯示方法:(本質上就是同一種方法)

(1)QChart必須顯示在widget上,更確切地說,是必須把它顯示在QGraphicView控件中,眾所周知,QT的ui控件都可以作為獨立窗口直接顯示,所以這就是方法1。

(2)把QChart顯示在ui界面的QGraphicView控件中。

PS:把QChart顯示在QGraphicView控件中,程序略顯繁瑣,QT早就為我們封裝好了一個ui控件類QtCharts::QChartView,它繼承了QGraphicView。這就是上文提到的把QGraphicView提升成了QChartView。用QChartView來顯示QChart還是很方便的。

用QGraphicView來顯示QChart較為繁瑣,下面來對比一下,分別用QGraphicView和QChartView來顯示QChart,代碼量的區別:

(1)用QGraphicView來顯示,需要借助QGraphicsScene類。具體地說就是,QGraphicView在最底層,QGraphicsScene在中間,QChart在最外層。

QGraphicsScene scene;//場景(中間層)
QGraphicsView view(&scene);//視圖(最底層)
view.setRenderHint(QPainter::Antialiasing);//設置視圖抗鋸齒
view.setSceneRect(0, 0, 630, 280);//設置視圖大小
 
QLineSeries *lineseries = new QLineSeries();//圖表的數據集
lineseries->append(0, 5);//append和<<功能差不多
*lineseries << QPointF(13, 5) << QPointF(17, 6) << QPointF(20, 2);
 
QChart *lineChart = new QChart();//圖表(最頂層)
lineChart->addSeries(lineseries);  // 將 數據集 添加至圖表中
 
scene.addItem(lineChart);//把圖標添加到場景中(一個場景中允許添加多個圖表)
view.show();//視圖顯示

(2)用QChartView來顯示QChart較為方便

QLineSeries *lineseries = new QLineSeries();//圖表的數據集
lineseries->append(0, 5);//append和<<功能差不多
*lineseries << QPointF(13, 5) << QPointF(17, 6) << QPointF(20, 2);
 
QChart *lineChart = new QChart();//圖表(最頂層)
lineChart->addSeries(lineseries);  // 將 數據集 添加至圖表中
 
QChartView *chartView = new QChartView(chart);//QChartView 可以一步到位直接顯示QChart
chartView->setRenderHint(QPainter::Antialiasing);//繼承來的抗鋸齒方法
chartView->resize(400, 300);
chartView->show();//本示例代碼,把該控件作為窗口直接顯示出來。
//其實,也可以把QChartView的父控件設置為主UI,這樣就能把QChartView顯示在主窗體中了

如果ui中已添加了QChartView,則可以直接在ui中顯示:

......
ui->histogramView->setChart(chart);  //histogramView--ui中已添加的QChartView
ui->histogramView->setRenderHint(QPainter::Antialiasing);
ui->histogramView->setVisible(true);

最后再來捋一下各個類之間的層次關系。下圖中,大括號“{”代表左邊實體包含右邊實體,下箭頭↓↓↓↓代表繼承關系

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM