概述
折线图 | 样条曲线 | 面积 | 散点 | 条形 |
---|
饼图 | 方块胡须图 | 蜡烛图 | 极坐标图 | |



折线图
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| #include <QtCharts> QT_CHARTS_USE_NAMESPACE
QChartView *chartView=new QChartView(this); QChart *chart = new QChart(); chart->setTitle("简单函数曲线");
chartView->setChart(chart); this->setCentralWidget(chartView);
QLineSeries *series0 = new QLineSeries(); series0->setName("Sin曲线"); chart->addSeries(series0);
qreal t=0,y1,y2,intv=0.1; int cnt=100; for(int i=0;i<cnt;i++) { y1=qSin(t); series0->append(t,y1); t+=intv; }
QValueAxis *axisX = new QValueAxis; axisX->setRange(0, 10); axisX->setTitleText("time(secs)"); chart->setAxisX(axisX, series0);
|


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| ui->btnColor->setAutoFillBackground(true); QString str=QString::asprintf("background-color: rgb(%d, %d, %d);", color.red(),color.green(),color.blue()); ui->btnColor->setStyleSheet(str);
chart->addAxis(axisX,Qt::AlignBottom); series0->attachAxis(axisX); *series0<<QPointF(t,y1); QMargins mg=aChart->margins(); mgs.setLeft(ui->spinMarginLeft->value()); ui->chartView->chart()->setMargins(mgs);
QValueAxis *axisX = new QValueAxis; axisX->setRange(0, 10); axisX->setLabelFormat("%.1f"); axisX->setTickCount(11); axisX->setMinorTickCount(4);
curSeries->setPointsVisible(checked);
curSeries->setPointLabelsVisible(checked);
ui->chartView->chart()->legend()->setVisible(checked);
QAbstractAxis* axes=ui->chartView->chart()->axes(Qt::Horizontal);
curAxis->setGridLineVisible(checked);
curAxis->setMinorGridLineVisible(checked);
ui->chartView->chart()->legend()->setBackgroundVisible(checked);
ui->chartView->chart()->legend()->setAlignment(Qt::AlignTop);
curAxis->setLabelFormat(ui->editAxisLabelFormat->text());
QColor color=curAxis->gridLineColor(); curAxis->setGridLineColor(color);
QColor color=curAxis->minorGridLineColor(); curAxis->setMinorGridLineColor(color);
curSeries->setOpacity(value/10.0);
QColor color=curSeries->pointLabelsColor(); curSeries->setPointLabelsColor(color);
curSeries->setPointLabelsFormat("@yPoint"); curSeries->setPointLabelsFormat("(@xPoint,@yPoint)");
ui->chartView->chart()->setAnimationOptions(QChart::AnimationOptions(index));
ui->chartView->chart()->setTheme(QChart::ChartTheme(index));
ui->chartView->chart()->zoom(1.2);
|
其他常见图

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| QChart *chart =ui->chartViewBar->chart();
QBarSet *setMath = new QBarSet(theModel->horizontalHeaderItem(colNoMath)->text()); QBarSet *setChinese = new QBarSet(theModel->horizontalHeaderItem(colNoChinese)->text()); QBarSet *setEnglish= new QBarSet(theModel->horizontalHeaderItem(colNoEnglish)->text()); QLineSeries *Line = new QLineSeries();
QBarSeries *series = new QBarSeries(); series->append(setMath); series->append(setChinese); series->append(setEnglish);
chart->addSeries(series); chart->addSeries(Line);
QStringList categories; for (int i=0;i<theModel->rowCount();i++) categories <<theModel->item(i,colNoName)->text();
QBarCategoryAxis *axisX = new QBarCategoryAxis(); axisX->append(categories); chart->setAxisX(axisX, series); chart->setAxisX(axisX, Line); axisX->setRange(categories.at(0), categories.at(categories.count()-1));
QValueAxis *axisY = new QValueAxis; axisY->setRange(0, 100); axisY->setTitleText("分数"); axisY->setTickCount(6); axisY->setLabelFormat("%.0f"); chart->setAxisY(axisY, series); chart->setAxisY(axisY, Line);
|

1 2 3
| QStackedBarSeries *series = new QStackedBarSeries();
|
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6mIVhUiH-1643874436171)(https://gitee.com/big-gift/my-pic/raw/master/Qt/image-20220118143511306.png)]
1 2
| QPercentBarSeries *series = new QPercentBarSeries();
|

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| QChart *chart =ui->chartViewPie->chart(); QPieSeries *series = new QPieSeries(); series->setHoleSize(ui->spinHoleSize->value()); series->setPieSize(ui->spinPieSize->value());
QPieSlice *slice; for(int i=0;i<=4;i++) { slice =series->slices().at(i); slice->setLabel(slice->label()+QString::asprintf(": %.0f人, %.1f%%", slice->value(),slice->percentage()*100));
connect(slice, SIGNAL(hovered(bool)), this, SLOT(on_PieSliceHighlight(bool))); } slice->setExploded(true); series->setLabelsVisible(true); chart->addSeries(series); chart->setTitle("Piechart----"+ui->cBoxCourse->currentText());
chart->legend()->setVisible(true); chart->legend()->setAlignment(Qt::AlignRight);
void MainWindow::on_PieSliceHighlight(bool show) { QPieSlice *slice; slice=(QPieSlice *)sender(); slice->setExploded(show); }
chart()->setTheme(QChart::ChartTheme(index));
|

1 2 3 4 5 6 7
| QSplineSeries *seriesLine = new QSplineSeries(); QScatterSeries *series0 = new QScatterSeries(); series0->setMarkerShape(QScatterSeries::MarkerShapeCircle); chart->addSeries(series0); chart->addSeries(seriesLine); chart->createDefaultAxes();
|
图表的其他操作

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
| #include <QtCharts> QT_CHARTS_USE_NAMESPACE
class QWChartView : public QChartView { Q_OBJECT
private: QPoint beginPoint; QPoint endPoint;
protected: void mousePressEvent(QMouseEvent *event); void mouseMoveEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); void keyPressEvent(QKeyEvent *event);
public: explicit QWChartView(QWidget *parent = 0); ~QWChartView();
signals: void mouseMovePoint(QPoint point); };
#include "qwchartview.h" #include <QChartView> void QWChartView::mousePressEvent(QMouseEvent *event) { if (event->button()==Qt::LeftButton) beginPoint=event->pos(); QChartView::mousePressEvent(event); }
void QWChartView::mouseMoveEvent(QMouseEvent *event) { QPoint point; point=event->pos();
emit mouseMovePoint(point); QChartView::mouseMoveEvent(event); }
void QWChartView::mouseReleaseEvent(QMouseEvent *event) { if (event->button()==Qt::LeftButton) { endPoint=event->pos(); QRectF rectF; rectF.setTopLeft(this->beginPoint); rectF.setBottomRight(this->endPoint); this->chart()->zoomIn(rectF); } else if (event->button()==Qt::RightButton) this->chart()->zoomReset(); QChartView::mouseReleaseEvent(event); }
void QWChartView::keyPressEvent(QKeyEvent *event) { switch (event->key()) { case Qt::Key_Plus: chart()->zoom(1.2); break; case Qt::Key_Minus: chart()->zoom(0.8); break; case Qt::Key_Left: chart()->scroll(10, 0); break; case Qt::Key_Right: chart()->scroll(-10, 0); break; case Qt::Key_Up: chart()->scroll(0, -10); break; case Qt::Key_Down: chart()->scroll(0, 10); break; case Qt::Key_PageUp: chart()->scroll(0, 50); break; case Qt::Key_PageDown: chart()->scroll(0, -50); break; case Qt::Key_Home: chart()->zoomReset(); break; default: QGraphicsView::keyPressEvent(event); } } QWChartView::QWChartView(QWidget *parent):QChartView(parent) { this->setDragMode(QGraphicsView::RubberBandDrag); this->setMouseTracking(true); }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| void MainWindow::on_LegendMarkerClicked() { QLegendMarker* marker = qobject_cast<QLegendMarker*> (sender());
switch (marker->type()) { case QLegendMarker::LegendMarkerTypeXY: { marker->series()->setVisible(!marker->series()->isVisible()); marker->setVisible(true); qreal alpha = 1.0; if (!marker->series()->isVisible()) alpha = 0.5;
QColor color; QBrush brush = marker->labelBrush(); color = brush.color(); color.setAlphaF(alpha); brush.setColor(color); marker->setLabelBrush(brush);
brush = marker->brush(); color = brush.color(); color.setAlphaF(alpha); brush.setColor(color); marker->setBrush(brush);
QPen pen = marker->pen(); color = pen.color(); color.setAlphaF(alpha); pen.setColor(color); marker->setPen(pen); break; } default: break; } }
QPointF pt=ui->chartView->chart()->mapToValue(point);
|