本文用一個簡單執行個體程式說明QChart繪圖的基本原理。建立一個基于QMainWindow的應用程式,主視窗上不放置任何元件。在主視窗類中隻定義一個createChart()函數,在主視窗的構造函數中調用此函數,即:
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
createChart();
}
createChart()函數用于建立圖表,其代碼如下:
void MainWindow::createChart()
{ //建立圖表
QChartView *chartView=new QChartView(this); //建立 ChartView
QChart *chart = new QChart(); //建立 Chart
chart->setTitle("簡單函數曲線");
chartView->setChart(chart); //Chart 添加到 ChartView
this->setCentralWidget(chartView);
//建立折順序列
QLineSeries *seriesO = new QLineSeries();
QLineSeries *series1 = new QLineSeries();
seriesO->setName("Sin 曲線");
series1->setName("Cos 曲線");
chart->addSeries(seriesO); //序列添加到圖表
chart->addSeries(series1);
//序列添加數值
qreal t=0,y1,y2,intv=0.1;
int cnt=100;
for(int i=0;i<cnt;i++){
y1=qSin(t);//+qrand();
seriesO->append(t,y1);
y2=qCos(t);
series1->append(t,y2);
t+=intv;
}
//建立坐标軸
QValueAxis *axisX = new QValueAxis; //X 軸
axisX->setRange(0, 10); //設定坐标軸範圍
axisX->setTitleText ("Angle (rad.) "); //标題
QValueAxis *axisY = new QValueAxis; //Y 軸
axisY->setRange(-2, 2);
axisY->setTitleText("value");
// 添加坐标軸
chart->addAxis(axisX,Qt::AlignBottom); //為chart設定坐标軸
chart->addAxis(axisY,Qt::AlignLeft);
seriesO->attachAxis(axisX);
seriesO->attachAxis(axisY);
series1->attachAxis(axisX);
series1->attachAxis(axisY);
}
程式運作後界面如下圖所示。
在createChart()函數裡,首先建立一個QChartView對象chartView,再建立一個QChart對象chart,将chart在chartView裡顯示,使用下面一行語句:
chartView->setChart(chart);
圖表上用于顯示資料的稱為序列(series),這裡使用折順序列QLineSeries,建立了兩個QLine Series類型的序列,并且将序列添加到chart中。
chart->addSeries(series0);
chart->addSeries(series1);
序列存儲用于顯示的資料,是以需要為直順序列添加平面資料點的坐标資料。程式生成正 弦和餘弦函數的資料作為序列的資料。
序列還需要坐标軸,建立QValueAxis類型的坐标軸作為圖表的X軸和Y軸,調用QChart的addAxis()和series的attachAxis()函數為兩個序列設定X軸和Y軸。
注意,老版本中添加坐标軸使用的是setAxisX()和setAxisY()函數,比如,
chart->setAxisX(axisX, series0);
chart->setAxisY(axisY, series0);
這個在新版本中已經被标記為obsolete,不建議再使用。