柚子快報邀請碼778899分享:筆記 Qt之QChart使用
柚子快報邀請碼778899分享:筆記 Qt之QChart使用
一、相關(guān)類的介紹
1、QChartView
視圖組件(畫布),無法單獨進行顯示,需要依附其他組件進行顯示,如在窗口設(shè)計界面先放置一個QGraphicsView組件,然后升級為QChartView;隨后QChartView通過setChart將QChart添加為顯示的圖表。?
2、QChart
代表一個圖表對象,可以包含一個或多個QAbstractSeries(系列)對象。它提供了管理和控制圖表的方法,如添加/移除系列、設(shè)置圖表標(biāo)題、軸標(biāo)簽等。
3、QAbstractSeries
是所有系列類的基類,代表圖表中的一個系列。派生類包括QLineSeries(線性系列)、QScatterSeries(散點系列)、QBarSeries(柱狀系列)等。每個系列可以包含一個或多個數(shù)據(jù)點,并且可以設(shè)置系列的樣式、顏色、圖例等屬性。?
4、QLineSeries
行序列,數(shù)據(jù)的表現(xiàn)形式,也就是我們要顯示的數(shù)據(jù),例如折線圖。一般是通過QChart的addSeries將QLineSeries添加到圖表中,當(dāng)然不止QLineSeries,還有其他很多類型。?
5、QValueAxis
坐標(biāo)軸。具體使用步驟為:①使用QChart的addAxis將坐標(biāo)軸添加到圖表上;②使用QLineSeries的attachAxis設(shè)置數(shù)據(jù)與坐標(biāo)軸的關(guān)系;注意這兩步設(shè)置有先后關(guān)系,必須先將坐標(biāo)軸添加到QChart,如果順序反了會提示沒有與之關(guān)聯(lián)的坐標(biāo)軸。?
6、QScatterSeries
代表圖表中的散點系列,用于繪制散點圖??梢酝ㄟ^添加數(shù)據(jù)點來構(gòu)建散點系列,也可以設(shè)置散點的樣式和顏色。
7、QBarSeries
代表圖表中的柱狀系列,用于繪制柱狀圖??梢酝ㄟ^添加數(shù)據(jù)點來構(gòu)建柱狀系列,也可以設(shè)置柱子的樣式和顏色。
8、QAbstractAxis
是所有軸類的基類,代表圖表中的一個軸。派生類包括QValueAxis(數(shù)值軸)和QCategoryAxis(分類軸)。每個軸可以設(shè)置軸范圍、刻度間隔、標(biāo)簽等屬性。
9、QCategoryAxis
代表圖表中的分類軸,用于顯示離散的類別。可以設(shè)置軸的類別列表、標(biāo)簽格式等屬性。
二、封裝的圖表類型
QtCharts 可以繪制以下類型的圖表:
1、折線圖(Line Chart):用于顯示數(shù)據(jù)的趨勢和變化,通過連接數(shù)據(jù)點形成折線。
2、散點圖(Scatter Chart):用于展示數(shù)據(jù)點的分布情況,每個數(shù)據(jù)點在坐標(biāo)系中獨立顯示。
3、柱狀圖(Bar Chart):用于比較多個類別或數(shù)據(jù)組之間的數(shù)值差異,使用矩形柱子表示。
4、條形圖(Horizontal Bar Chart):類似于柱狀圖,但是柱子是橫向排列的。
5、餅圖(Pie Chart):用于展示數(shù)據(jù)占比情況,通過扇形的大小表示不同數(shù)據(jù)的相對比例。
6、區(qū)域圖(Area Chart):用于顯示數(shù)據(jù)的累積變化情況,通過填充區(qū)域來表達數(shù)據(jù)的范圍。
7、股票圖(Stock Chart):用于展示股票市場的價格數(shù)據(jù),包括開盤價、收盤價、最高價、最低價等。
8、散點線圖(Spline Chart):類似于散點圖,但是通過平滑的曲線連接數(shù)據(jù)點,更加強調(diào)數(shù)據(jù)的變化趨勢。
9、曲線圖(Spline Series Chart):用于平滑地顯示數(shù)據(jù)的變化情況,通過插值算法計算平滑曲線。
10、雷達圖(Radar Chart):用于展示多個數(shù)據(jù)維度之間的相對關(guān)系,通過多邊形的面積來表示數(shù)據(jù)的相對大小。
三、開始步驟
1、打開.pro文件,輸入Qt += charts,引入Qt Charts模塊;?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?2、打開ui設(shè)計器,選擇一個Graphics View控件,鼠標(biāo)右鍵提升為;
3、輸入QChartView,點擊添加、提升;
? ? ? ? ? ? ? ? ? ? ? ? ?
4、在窗口右上角就可以看見控件類型變成QChartView了,然后將控件命名為chartView。
???????????????????????????????????????????
5、在代碼中添加QtCharts頭文件,引入命名空間; ? ? ? ? ? ? ?
四、QChart設(shè)置?
QChart類的主要函數(shù)
圖表外觀void setTitle()設(shè)置圖表標(biāo)題,顯示在圖表上方,支持HTML格式void setTitleFont()設(shè)置圖表標(biāo)題字體void setTitleBrush()設(shè)置圖表標(biāo)題畫刷void setTheme()設(shè)置主題,主題是內(nèi)置的UI設(shè)置,定義了圖表的配色void setMargins()設(shè)置繪圖區(qū)與圖表邊界的4個邊距QLegend* legend()返回圖表的圖例,是一個QLegend類的對象void setAnimationOptions()設(shè)置序列或坐標(biāo)軸的動畫效果數(shù)據(jù)序列void addSeries()添加序列QList
void setAnimationOptions(AnimationOptions options)函數(shù)設(shè)置圖表的動畫效果,輸入?yún)?shù)是QChart::AnimationOption枚舉類型,有以下幾種類型:
QChart::NoAnimation,無動畫效果 QChart::GridAxisAnimation,背景網(wǎng)格有動畫效果 QChart::SeriesAnimation,序列有動畫效果 QChart::AllAnimation,都有動畫效果
五、QValueAxis坐標(biāo)軸的創(chuàng)建?
QValueAxis類的主要函數(shù)
坐標(biāo)軸整體void setVisible()設(shè)置坐標(biāo)軸可見性???????? Qt::Orientation orientation() 返回坐標(biāo)軸方向void setMin()設(shè)置坐標(biāo)軸最小值void setMax()設(shè)置坐標(biāo)軸最大值void setRange()設(shè)置坐標(biāo)軸最小、最大值表示的范圍軸標(biāo)題void setTitleVisible()設(shè)置軸標(biāo)題的可見性void setTitleText()設(shè)置軸標(biāo)題的文字void setTitleFont()設(shè)置軸標(biāo)題的字體void setTitleBrush()設(shè)置軸標(biāo)題的畫刷軸標(biāo)簽void setLabelFormat()????????設(shè)置標(biāo)簽格式,例如可以設(shè)置顯示的小數(shù)點位數(shù)void setLabelsAngle()設(shè)置標(biāo)簽的角度,單位為度void setLabelsBrush()設(shè)置標(biāo)簽的畫刷void setLabelsColor()設(shè)置標(biāo)簽文字顏色void setLabelsFont()設(shè)置標(biāo)簽文字字體void setLabelsVisible()設(shè)置軸標(biāo)簽文字是否可見軸線和刻度線void setTickCount()設(shè)置坐標(biāo)軸主刻度個數(shù)void setLineVisible()設(shè)置軸線和刻度線的可見性void setLinePen()設(shè)置軸線和刻度線的畫筆void setLinePenColor()設(shè)置軸線和刻度線的顏色主刻度線void setGridLineColor()設(shè)置網(wǎng)格線的顏色void setGridLinePen()設(shè)置網(wǎng)格線的畫筆void setGridLineVisible()設(shè)置網(wǎng)格線的可見性次刻度和次網(wǎng)格線void setMinorTickCount()設(shè)置兩個主刻度之間的次刻度的個數(shù)void setMinorGridLineColor()設(shè)置次網(wǎng)格線的顏色void setMinorGridLinePen()設(shè)置次網(wǎng)格線的畫筆void setMinorGridLineVisible()設(shè)置次網(wǎng)格線的可見性
1、第一種方式:使用addAxis方式(可以設(shè)置坐標(biāo)軸位置)
//1.創(chuàng)建畫布(已用ui設(shè)置)
//2.創(chuàng)建圖表
chart = new QChart;
//3.創(chuàng)建xy坐標(biāo)
axisX = new QValueAxis;
axisY = new QValueAxis;
//4.設(shè)置坐標(biāo)范圍
axisX->setRange(-10,10);
axisY->setRange(-10,10);
//5.將坐標(biāo)加入圖表,并設(shè)置坐標(biāo)位置
chart->addAxis(axisX,Qt::AlignBottom);
chart->addAxis(axisY,Qt::AlignLeft);
//6.將序列加入圖表
//7.關(guān)聯(lián)xy軸,將序列加入自己的xy坐標(biāo)(attachAxis)
//8.將圖表加入畫布
ui->chartView->setChart(chart);
2、第二種方式:使用setAxisX、setAxisY方式(不可以設(shè)置坐標(biāo)軸位置)
//1.創(chuàng)建畫布(已用ui設(shè)置)
//2.創(chuàng)建圖表
chart = new QChart;
//3.創(chuàng)建xy坐標(biāo)
axisX = new QValueAxis;
axisY = new QValueAxis;
//4.設(shè)置坐標(biāo)范圍
axisX->setRange(-10,10);
axisY->setRange(-10,10);
//5.將坐標(biāo)加入圖表,關(guān)聯(lián)xy軸(將序列圖表放在自己創(chuàng)建的坐標(biāo)系上)
chart->setAxisX(axisX);
chart->setAxisY(axisY);
//6.將序列加入圖表
//7.將圖表加入畫布
ui->chartView->setChart(chart);
總結(jié):
在Qt的QChart中,可以使用以下兩種方式來設(shè)置坐標(biāo)軸:
1、使用addAxis()方法:在這種方式下,軸對象可以在圖表中獨立于系列添加和移除,因此可以在圖表中靈活地管理和控制不同的軸。
2、使用setAxisX()和setAxisY()方法:在這種方式下,每個圖表只能有一個X軸和一個Y軸,并且會自動將系列與這些軸關(guān)聯(lián)起來。當(dāng)添加新的系列時,它們會自動使用已設(shè)置的X軸和Y軸。
總體而言,使用addAxis()方法可以在圖表中添加多個軸,并且可以更靈活地管理不同的軸。而使用setAxisX()和setAxisY()方法則適用于只需要一個X軸和一個Y軸的簡單情況,并且可以自動關(guān)聯(lián)系列和軸。選擇使用哪種方式取決于你的需求和使用場景。
六、QChart繪圖一般步驟?
1、創(chuàng)建QChartView畫布
2、創(chuàng)建QChart圖表
3、創(chuàng)建序列
4、創(chuàng)建QValueAxis坐標(biāo)軸(部分圖表不用,例如:餅狀圖)
5、配置序列(坐標(biāo)軸)、設(shè)置序列(坐標(biāo)軸)參數(shù)、添加數(shù)據(jù)等
6、將序列加入圖表
7、將坐標(biāo)軸加入圖表?
8、關(guān)聯(lián)xy軸(部分圖表不用,例如:餅狀圖),將圖表和自己創(chuàng)建的xy軸關(guān)聯(lián)
9、將圖表QChart加入QChartView畫布中
七、散點圖
QScatterSeries類的主要函數(shù)
append(double x, double y)向散點圖中添加一個點replace(int index, double x, double y)替換指定索引位置的點的坐標(biāo)。setMarkerShape(QScatterSeries::MarkerShape shape)設(shè)置散點的形狀。setMarkerSize(qreal size)設(shè)置散點的大小。setBorderColor(QColor color)設(shè)置散點的邊框顏色。setBrush(QColor color)設(shè)置散點的填充顏色。setColor(QColor color)設(shè)置散點的顏色,包括邊框和填充。clear()清空散點圖中的所有點。
//初始化坐標(biāo)軸
create_coordinate_system();
//創(chuàng)建圖表
QChart *chart = new QChart;
//自定義創(chuàng)建散點
QScatterSeries *scatterSeries = new QScatterSeries;
scatterSeries->setName("散點");
scatterSeries->setMarkerSize(7);
scatterSeries->setMarkerShape(QScatterSeries::MarkerShapeCircle);//設(shè)置散點形狀為圓
scatterSeries->append(1,1);
//隨機散點
for(int i = -60; i < 60; i++)// 添加120個任意點
{
scatterSeries->append(i, QRandomGenerator::global()->bounded(-60, 60));
}
//將散點加入圖表中
chart->addSeries(scatterSeries);
//將散點的圖表放在自己創(chuàng)建的坐標(biāo)系上
chart->setAxisX(x_axis,scatterSeries);
chart->setAxisY(y_axis,scatterSeries);
//將圖表加入畫布中
ui->chartView->setChart(chart);
效果圖:
八、折線圖
QLineSeries類的主要函數(shù)
序列名稱void setName()設(shè)置序列的名稱,這個名稱會顯示在圖例里,支持HTML格式圖表QChart *chart()返回序列所屬的圖表對象序列外觀void setVisible()設(shè)置序列的可見性void show()顯示序列,使序列可見void hide()隱藏序列,使其不可見void setColor()設(shè)置序列線條的顏色void setPen()設(shè)置序列線條的畫筆void setBrush()設(shè)置繪制數(shù)據(jù)點的畫刷void setOpacity()設(shè)置序列的透明度,0表示完全透明,1表示不透明數(shù)據(jù)點void setPointsVisible()設(shè)置數(shù)據(jù)點的可見性void append()添加一個數(shù)據(jù)點到序列void insert()在某個位置插入一個數(shù)據(jù)點void replace()替換某個數(shù)據(jù)點void clear()清空所有數(shù)據(jù)點void remove()刪除某個數(shù)據(jù)點void removePoints()從某個位置開始,刪除指定個數(shù)的數(shù)據(jù)點int count()????????數(shù)據(jù)點的個數(shù)QPointF& at()返回某個位置的數(shù)據(jù)點QList
//初始化坐標(biāo)軸
create_coordinate_system();
//創(chuàng)建圖表
QChart *chart = new QChart;
//創(chuàng)建線條
QLineSeries *lineSeries1 = new QLineSeries;
QLineSeries *lineSeries2 = new QLineSeries;
lineSeries1->setName("正弦曲線");
lineSeries2->setName("折線");
int i;//sin的步長,橫坐標(biāo)
for(i=-60;i<61;i++){
qreal j = qSin(i);
lineSeries1->append(i,j);
}
// 添加折線數(shù)據(jù)
qsrand(QTime::currentTime().second());
for(int i = 0; i <= 20; i++) {
qreal x = i;
qreal y = qrand()%100;
lineSeries2->append(x, y);
}
//將線條加入圖表
chart->addSeries(lineSeries1);
chart->addSeries(lineSeries2);
//將有線條的圖表加入自己的坐標(biāo)系中
chart->setAxisX(x_axis,lineSeries1);
chart->setAxisY(y_axis,lineSeries1);
//將圖表加入畫布中
ui->chartView->setChart(chart);
效果圖:
九、柱狀圖
QBarSet類的主要函數(shù)功能
標(biāo)簽void setLabel()設(shè)置數(shù)據(jù)集的標(biāo)簽,用于圖例的顯示文字void setLabelBrush()設(shè)置標(biāo)簽的畫刷void setLabelColor()設(shè)置標(biāo)簽的文字顏色void setLabelFont()設(shè)置標(biāo)簽的字體數(shù)據(jù)棒void setBorderColor()設(shè)置數(shù)據(jù)集的棒圖的邊框顏色void setBrush()設(shè)置數(shù)據(jù)集的棒圖的畫刷void setColor()設(shè)置數(shù)據(jù)集的棒圖填充顏色void setPen()設(shè)置數(shù)據(jù)集的棒圖的邊框畫筆數(shù)據(jù)點void append()添加一個數(shù)據(jù)到數(shù)據(jù)集void insert()在某個位置插入一個數(shù)據(jù)到數(shù)據(jù)集void remove()從某個位置開始刪除一定數(shù)量的數(shù)據(jù)void replace()替換某個位置的數(shù)據(jù)qreal at()返回某個位置的數(shù)據(jù)int count()返回數(shù)據(jù)的個數(shù)qreal sum()返回數(shù)據(jù)集內(nèi)所有數(shù)據(jù)的和
(一)普通柱狀圖
//初始化坐標(biāo)軸
create_coordinate_system();
//創(chuàng)建圖表
chart = new QChart;
//創(chuàng)建QBarSeries,條形圖容器,用于管理和顯示多條柱子
QBarSeries *barSeries = new QBarSeries;
// barSeries->setBarWidth(5);//設(shè)置數(shù)據(jù)棒的寬度
//創(chuàng)建QBarSet并添加數(shù)據(jù)
QBarSet *set1 = new QBarSet("data1");
QBarSet *set2 = new QBarSet("data2");
QBarSet *set3 = new QBarSet("data3");
QBarSet *set4 = new QBarSet("data4");
*set1 << QRandomGenerator::global()->bounded(0, 61)
<< QRandomGenerator::global()->bounded(0, 61)
<< QRandomGenerator::global()->bounded(0, 61)
<< QRandomGenerator::global()->bounded(0, 61);
*set2 << QRandomGenerator::global()->bounded(0, 61)
<< QRandomGenerator::global()->bounded(0, 61)
<< QRandomGenerator::global()->bounded(0, 61)
<< QRandomGenerator::global()->bounded(0, 61);
*set3 << QRandomGenerator::global()->bounded(0, 61)
<< QRandomGenerator::global()->bounded(0, 61)
<< QRandomGenerator::global()->bounded(0, 61)
<< QRandomGenerator::global()->bounded(0, 61);
*set4 << QRandomGenerator::global()->bounded(-60, 1)
<< QRandomGenerator::global()->bounded(-60, 1)
<< QRandomGenerator::global()->bounded(-60, 1)
<< QRandomGenerator::global()->bounded(-60, 1);
//用于橫坐標(biāo)的字符串列表
QStringList categories;
categories<<"學(xué)生1"<<"學(xué)生2"<<"學(xué)生3"<<"學(xué)生4";
//用于柱狀圖的橫坐標(biāo)
QBarCategoryAxis *axisX = new QBarCategoryAxis;
axisX->append(categories);
axisX->setRange(categories[0],categories[categories.length()-1]);
//將QBarSet添加到QBarSeries中
barSeries->append(set1);
barSeries->append(set2);
barSeries->append(set3);
barSeries->append(set4);
//將QBarSeries添加到圖表中
chart->addSeries(barSeries);
//將散點的圖表放在自定義坐標(biāo)中
chart->setAxisX(axisX,barSeries);
chart->setAxisY(y_axis,barSeries);
//將圖表加入畫布中
ui->chartView->setChart(chart);
效果圖:
(二)堆疊柱狀圖
//創(chuàng)建圖表
QChart *chart = new QChart;
//創(chuàng)建QStackedBarSeries,堆柱狀圖
QStackedBarSeries *series=new QStackedBarSeries;
// barSeries->setBarWidth(5);//設(shè)置數(shù)據(jù)棒的寬度
//創(chuàng)建QBarSet并添加數(shù)據(jù)
QBarSet *set1 = new QBarSet("data1");
QBarSet *set2 = new QBarSet("data2");
QBarSet *set3 = new QBarSet("data3");
*set1 << QRandomGenerator::global()->bounded(0, 100)
<< QRandomGenerator::global()->bounded(0, 100)
<< QRandomGenerator::global()->bounded(0, 100)
<< QRandomGenerator::global()->bounded(0, 100);
*set2 << QRandomGenerator::global()->bounded(0, 100)
<< QRandomGenerator::global()->bounded(0, 100)
<< QRandomGenerator::global()->bounded(0, 100)
<< QRandomGenerator::global()->bounded(0, 100);
*set3 << QRandomGenerator::global()->bounded(0, 100)
<< QRandomGenerator::global()->bounded(0, 100)
<< QRandomGenerator::global()->bounded(0, 100)
<< QRandomGenerator::global()->bounded(0, 100);
//用于橫坐標(biāo)的字符串列表
QStringList categories;
categories<<"學(xué)生1"<<"學(xué)生2"<<"學(xué)生3"<<"學(xué)生4";
//用于柱狀圖的橫坐標(biāo)
QBarCategoryAxis *axisX = new QBarCategoryAxis;
axisX->append(categories);
axisX->setRange(categories[0],categories[categories.length()-1]);
//數(shù)值型坐標(biāo)作為縱坐標(biāo)
QValueAxis *axisY=new QValueAxis;
axisY->setRange(0,300);
axisY->setTitleText("分?jǐn)?shù)");
axisY->setTickCount(11);
axisY->setMinorTickCount(10);
axisY->setLabelFormat("%d");
//將QBarSet添加到QBarSeries中
series->append(set1);
series->append(set2);
series->append(set3);
series->setLabelsVisible(true);
//將QBarSeries添加到圖表中
chart->addSeries(series);
//將散點的圖表放在自定義坐標(biāo)中
chart->setAxisX(axisX,series);
chart->setAxisY(axisY,series);
//將圖表加入畫布中
ui->chartView->setChart(chart);
效果圖:
(三)百分比柱狀圖
//創(chuàng)建圖表
QChart *chart = new QChart;
//創(chuàng)建QPercentBarSeries,百分比柱狀圖
QPercentBarSeries *series=new QPercentBarSeries;
// barSeries->setBarWidth(5);//設(shè)置數(shù)據(jù)棒的寬度
//創(chuàng)建QBarSet并添加數(shù)據(jù)
QBarSet *set1 = new QBarSet("data1");
QBarSet *set2 = new QBarSet("data2");
QBarSet *set3 = new QBarSet("data3");
*set1 << QRandomGenerator::global()->bounded(0, 100)
<< QRandomGenerator::global()->bounded(0, 100)
<< QRandomGenerator::global()->bounded(0, 100)
<< QRandomGenerator::global()->bounded(0, 100);
*set2 << QRandomGenerator::global()->bounded(0, 100)
<< QRandomGenerator::global()->bounded(0, 100)
<< QRandomGenerator::global()->bounded(0, 100)
<< QRandomGenerator::global()->bounded(0, 100);
*set3 << QRandomGenerator::global()->bounded(0, 100)
<< QRandomGenerator::global()->bounded(0, 100)
<< QRandomGenerator::global()->bounded(0, 100)
<< QRandomGenerator::global()->bounded(0, 100);
//用于橫坐標(biāo)的字符串列表
QStringList categories;
categories<<"學(xué)生1"<<"學(xué)生2"<<"學(xué)生3"<<"學(xué)生4";
//用于柱狀圖的橫坐標(biāo)
QBarCategoryAxis *axisX = new QBarCategoryAxis;
axisX->append(categories);
axisX->setRange(categories[0],categories[categories.length()-1]);
//數(shù)值型坐標(biāo)作為縱坐標(biāo)
QValueAxis *axisY=new QValueAxis;
axisY->setRange(0,300);
axisY->setTitleText("百分比");
axisY->setTickCount(6);
axisY->setMinorTickCount(10);
axisY->setLabelFormat("%d");
//將QBarSet添加到QBarSeries中
series->append(set1);
series->append(set2);
series->append(set3);
series->setLabelsVisible(true);
//將QBarSeries添加到圖表中
chart->addSeries(series);
//將散點的圖表放在自定義坐標(biāo)中
chart->setAxisX(axisX,series);
chart->setAxisY(axisY,series);
//將圖表加入畫布中
ui->chartView->setChart(chart);
效果圖:
十、餅狀圖
QPieSeries類的主要函數(shù)功能
分塊操作bool append()添加一個分塊到餅圖bool insert()在某個位置插入一個分塊bool remove()移除并刪除一個分塊bool take()移除一個分塊,但并不刪除數(shù)據(jù)塊對象void clear()清除序列所有分塊QList
//創(chuàng)建圖表
QChart *chart = new QChart;
//創(chuàng)建餅狀圖序列
QPieSeries *pieSeries = new QPieSeries;
//設(shè)置餅狀圖數(shù)據(jù)
pieSeries->append("data1",7);
pieSeries->append("data2",4);
pieSeries->append("data3",9);
pieSeries->append("data4",3);
pieSeries->append("data5",6);
QPieSlice *slice = pieSeries->slices().at(0);
slice->setExploded(true);//設(shè)置exploded動畫效果
pieSeries->setLabelsVisible(true);//設(shè)置餅圖劃分的提示
//將餅狀圖加入圖表
chart->addSeries(pieSeries);
//將圖表加入畫布
ui->chartView->setRenderHint(QPainter::Antialiasing); // 抗鋸齒
ui->chartView->setChart(chart);
效果圖:
十一、極坐標(biāo)(雷達)
QPolarChart類的主要函數(shù)
addSeries(QAbstractSeries *series)向極坐標(biāo)圖表中添加一個數(shù)據(jù)系列。removeSeries(QAbstractSeries *series)從極坐標(biāo)圖表中移除指定的數(shù)據(jù)系列。setBackgroundVisible(bool visible)設(shè)置是否顯示極坐標(biāo)圖表的背景。setAxisX(QValueAxis *axis)設(shè)置極坐標(biāo)圖表的 X 軸。setAxisY(QValueAxis *axis)設(shè)置極坐標(biāo)圖表的 Y 軸。setAngularOrientation(Qt::Orientation orientation)設(shè)置極坐標(biāo)圖表的角度方向。setRadialOrientation(Qt::Orientation orientation)設(shè)置極坐標(biāo)圖表的徑向方向。
QScatterSeries* series = new QScatterSeries(); // 創(chuàng)建一個散點繪圖數(shù)據(jù)集對象
const qreal angularMax = 100; // 最大角度
series->setName("散點");
for(int i = 0; i < angularMax; i += 10)
{
series->append(i, i + 100); // 向series中添加數(shù)據(jù),X:角度 Y:到圓心距離
}
QPolarChart* chart = new QPolarChart(); // 創(chuàng)建一個極坐標(biāo)系圖表
chart->legend()->setVisible(false); // 隱藏圖例
chart->addSeries(series); // 將創(chuàng)建的series添加進圖表中
chart->createDefaultAxes(); // 根據(jù)已有的series生成默認(rèn)的坐標(biāo)軸
ui->chartView->setChart(chart);
效果圖:
十二、動態(tài)曲線(可縮放、查坐標(biāo))?
static int count = 0;
// //初始化畫布(已用ui)
// chartView = new QChartView(this);
// chartView->setFixedSize(this->window()->width(),this->window()->height());//設(shè)置畫布大小
chart = new QChart;
QLineSeries *lineSeries = new QLineSeries;
lineSeries->setName("QLineSeries不平滑曲線");
QSplineSeries *splineSeries = new QSplineSeries;
splineSeries->setName("QSplineSeries平滑曲線");
// int i;
// for(i = -10;i<11;i++){
// qreal j = qSin(i);
// qreal k = qCos(i);
// lineSeries->append(i,j);
// splineSeries->append(i,k);
// }
QValueAxis *axisX = new QValueAxis();
QValueAxis *axisY = new QValueAxis();
axisY->setRange(-10,10);
axisX->setRange(0,30);
chart->addSeries(lineSeries);
chart->addSeries(splineSeries);
//加入chart并設(shè)置坐標(biāo)軸位置、方向
chart->addAxis(axisX,Qt::AlignBottom);
chart->addAxis(axisY,Qt::AlignLeft);
//將序列綁定在自己的坐標(biāo)軸上
lineSeries->attachAxis(axisX);
lineSeries->attachAxis(axisY);
splineSeries->attachAxis(axisX);
splineSeries->attachAxis(axisY);
ui->chartView->setChart(chart);
ui->chartView->setMouseTracking(true); //開啟鼠標(biāo)追蹤功能
QTimer *timer = new QTimer(this);
connect(timer, &QTimer::timeout, this, [=](){
qreal j = qSin(count);
qreal k = qCos(count);
lineSeries->append(count, j);
splineSeries->append(count, k);
int points = splineSeries->points().size();
if(points >= 30){
axisX->setMax(++count);
axisX->setMin(count-30);
}else {
count++;
}
});
timer->start(100);
//=======================================================================================
//槽函數(shù)
void Widget::mouseMoveEvent(QMouseEvent *event)
{
// 獲取鼠標(biāo)在QChartView中的坐標(biāo)(按住鼠標(biāo)左鍵顯示坐標(biāo))
QPointF mousePoint = event->pos();
// 獲取鼠標(biāo)在QChartView中的坐標(biāo)
QPoint chartPoint = ui->chartView->mapFromGlobal(event->globalPos());
// 將坐標(biāo)轉(zhuǎn)換為QChart中的數(shù)值
QPointF value = ui->chartView->chart()->mapToValue(mousePoint);
// 在這里你可以更新提示框或者標(biāo)簽來顯示當(dāng)前坐標(biāo)點的數(shù)值
updateTooltip(value);
}
void Widget::wheelEvent(QWheelEvent *event)
{
if(event->delta() > 0){ // 當(dāng)滾輪遠離使用者時
chart->zoomIn(); // 進行放大
// Xrang /= 1.5;
}else{ // 當(dāng)滾輪向使用者方向旋轉(zhuǎn)時
chart->zoomOut(); // 進行縮小
// Xrang *= 1.5;
}
}
參考博客https://blog.csdn.net/weixin_55238862/article/details/130902767?spm=1001.2014.3001.5506
柚子快報邀請碼778899分享:筆記 Qt之QChart使用
好文鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。