簡介
Qt的線性繪圖控件有大名鼎鼎的Qwt,ChartDirector,小巧玲瓏的QCustomPlot,當然還有自家的QtChart。長久以來QtChart在Qt家族里一直是收費的模塊,只有商業(yè)版才可以使用,但Qt5.7之后將開放其權(quán)限,可參見:Qt 5.7 亮瞎眼的更新。下面將介紹如何安裝QtChart并進行簡單的繪圖。
下載
這里用git下載QtChart,參考Qt Charts 5.7.0 安裝教程
如果大家還用Qt5.4以下版本請升級完再看,Qt5.4以下是不支持滴
下載完目錄是這樣的:
開始編譯前需要下載Perl:activePerl
直接下一步點到頭安裝。
安裝完成后需要重啟一下電腦或者手動激活一下環(huán)境變量。
編譯QtChart
此時用Qt Creator加載qtcharts.pro
一杯茶的時間后:
此時在生成目錄下生成:
安裝
編譯結(jié)束后就可以進行安裝了
選擇Qt Creator項目欄 - 運行標簽 - 添加部署構(gòu)建
這里需要添加兩個部署,一個是QtChart的安裝,一個是QtChart文檔的編譯。
如圖所示配置完后,點擊運行
這時會有很多復(fù)制的信息,它會把編譯好的dll和頭文件復(fù)制到Qt的安裝目錄下
打開Qt目錄下的lib文件夾和include文件夾可以看到被復(fù)制過來的QtChart信息。
這時,再看QtChart的生成目錄,比第一次編譯時多了一個doc文件夾
你只要把這個doc文件夾里的qtcharts文件夾和qtcharts.qch文件復(fù)制到Qt安裝目錄下的Docs文件夾內(nèi)對應(yīng)版本文件夾下即可
這時打開Qt Assisant,搜QtChart,即可看到說明文檔!
這時你的QtChart大部分已經(jīng)配置完成。
還有example的安裝,可參看文獻[3]
測試QtChart
下面演示如何用Qt Creator的界面設(shè)計師創(chuàng)建一個QtChart,其他方法可見參考文獻。
首先新建一個Widget項目
使用一個Widget作為Chart的載體,在界面上放置一個Widget
右鍵點擊這個widget,把這個Widget提升。
把這個Widget提升為QChartView
QtChart有兩類繪圖窗口容器,分別為QChart(QPolarChart)和QChartView,其區(qū)別官方文檔說明為:
QChart is a QGraphicsWidget that you can show in a QGraphicsScene. It manages the graphical representation of different types of series and other chart related objects like legend and axes. If you simply want to show a chart in a layout, you can use the convenience class QChartView instead of QChart.
QChartView is a standalone widget that can display charts. It does not require separate QGraphicsScene to work. If you want to display a chart in your existing QGraphicsScene, you need to use the QChart (or QPolarChart) class instead.
因為這里是單獨作為一個窗體放置,因此用QChartView
提升的類名為QChartView ?
頭文件也為QChartView ,Qt每個類都有個無后綴的同類名文件,方便include
嘗試編譯一下程序會出現(xiàn)一個錯誤:
官方文檔說明,使用QtChart還需要對pro文件進行設(shè)置:
To create a simple application, start by creating a new Qt Gui Application project in Qt Creator and add this line to the .pro file of the project:
QT?+=?charts
In the main.cpp file, include the module headers and declare namespace usage:
#includeusing?namespace?QtCharts;
其中,可以使用QT_CHARTS_USE_NAMESPACE
替代using namespace QtCharts;
添加完所需要的內(nèi)容,編譯還是發(fā)生錯誤,錯誤定位到ui_widget里
前面說了,用到QtChart的地方需要包含#include
以及命名空間using namespace QtCharts;
(或者QT_CHARTS_USE_NAMESPACE
替代using namespace QtCharts;)
但是ui_widget文件是自動生成的,不能再此文件里進行修改,此文件是包含在widget.h的一個叫Ui的命名空間中,因此,可以把
#includeQT_CHARTS_USE_NAMESPACE
放置在widget.h上:
#ifndef?WIDGET_H #define?WIDGET_H #includenamespace?Ui?{ class?Widget; } class?Widget?:?public?QWidget { ????Q_OBJECT public: ????explicit?Widget(QWidget?*parent?=?0); ????~Widget(); private: ????Ui::Widget?*ui; }; #endif?//?WIDGET_H
此時在編譯即可:
在構(gòu)造函數(shù)里添加:
QLineSeries*?line1?=?new?QLineSeries(); for(double?x=0;xappend(x,sin(x)); } QChart*?c?=?new?QChart(); c->addSeries(line1); ui->chart->setChart(c);
效果如下:
總結(jié)
在使用界面設(shè)計師用QtChart時,需要在對應(yīng)的界面頭文件上添加:
#includeQT_CHARTS_USE_NAMESPACE
否則會發(fā)生編譯錯誤!
完!