Qt(QChart)图表绘制

具备功能

图标字体颜色,横纵轴的修改,数据的选择,主题的变换,放大缩小等等
在这里插入图片描述

Demo

折线绘制

通过QLineSeries类以折线图的形式显示数据。
折线图用于将信息显示为由直线连接的一系列数据点。
创建基本折线图:

    QLineSeries *sSeries = new QLineSeries();
    QLineSeries *tSeries = new QLineSeries();

    for (int i = 0; i < 360; ++i) {
        sSeries->append(i, sin(M_PI * i / 180));
        tSeries->append(i, cos(M_PI * i / 180));
    }

QXYSeries(折线图、样条曲线图、散点图的基类)

QXYSeries类是折线图、样条曲线图、散点图的基类,QSplineSeries、QLineSeries、QScatterSeries都参照该类使用。

主要代码

main函数代码

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QLineSeries *sSeries = new QLineSeries();
    QLineSeries *tSeries = new QLineSeries();

    for (int i = 0; i < 360; ++i) {
        sSeries->append(i, sin(M_PI * i / 180));
        tSeries->append(i, cos(M_PI * i / 180));
    }

    ChartForm w;
    w.allowUserEdit();
    QString asd="123";
    QString zxc="456";
    w.addSeries(sSeries, asd);
    w.addSeries(tSeries, zxc);

    w.show();

    return a.exec();
}

绘制图标

QChart *ChartForm::createChart()
{
    mChart = new Chart();

    mChart->setAxisX(new QValueAxis);
    mChart->setAxisY(new QValueAxis);
    mChart->axisX()->setRange(-40, 40);
    mChart->axisY()->setRange(0, 1);
    //    mChart->setTitle("MTF");
    mChart->legend()->hide();
    //    // Add space to label to add space between labels and axis
    //    // XY轴刻度显示4位小数
    //    static_cast<QValueAxis *>(mChart->axisX())->setLabelFormat("%0.4f");
    //    static_cast<QValueAxis *>(mChart->axisY())->setLabelFormat("%0.4f");

    return mChart;
}

主题变换

void ChartForm::populateThemeBox()
{
    // add items to theme combobox
    ui->themeComboBox->addItem("Light", QChart::ChartThemeLight);
    ui->themeComboBox->addItem("Blue Cerulean", QChart::ChartThemeBlueCerulean);
    ui->themeComboBox->addItem("Dark", QChart::ChartThemeDark);
    ui->themeComboBox->addItem("Brown Sand", QChart::ChartThemeBrownSand);
    ui->themeComboBox->addItem("Blue NCS", QChart::ChartThemeBlueNcs);
    ui->themeComboBox->addItem("High Contrast", QChart::ChartThemeHighContrast);
    ui->themeComboBox->addItem("Blue Icy", QChart::ChartThemeBlueIcy);
    ui->themeComboBox->addItem("Qt", QChart::ChartThemeQt);
}

显示隐藏参数

void ChartForm::connectMarkers()
{
    const auto markers = mChart->legend()->markers();
    for (QLegendMarker *marker : markers) {
        // Disconnect possible existing connection to avoid multiple connections
        disconnect(marker, &QLegendMarker::clicked,
                   this, &ChartForm::handleMarkerClicked);
        connect(marker, &QLegendMarker::clicked, this, &ChartForm::handleMarkerClicked);
    }
}

编辑图表参数

void ChartForm::allowUserEdit()
{
    mEditEnable = true;
    // 初始化右击菜单
    mRightClickMenu = new QMenu(this);
    mEditAction = new QAction(QIcon(":/chart/image/edit.png"), tr("Edit"), mRightClickMenu);
    mClearAction = new QAction(QIcon(":/chart/image/clean.png"), tr("Clean"), mRightClickMenu);
    mRightClickMenu->addAction(mEditAction);
    mRightClickMenu->addAction(mClearAction);
    connect(mEditAction, &QAction::triggered, this, &ChartForm::editChart);
    connect(mClearAction, &QAction::triggered, this, &ChartForm::clearChart);
}

增加线的条数

void ChartForm::addSeries(QXYSeries *series, QString &title)
{
    series->setName(title);
    // 打开OpenGL加速
//    series->setUseOpenGL(true);
    mChart->addSeries(series);
    connect(series, &QXYSeries::clicked, this, &ChartForm::keepCallout);
    connect(series, &QXYSeries::hovered, this, &ChartForm::tooltip);
    mChart->createDefaultAxes();
    // 保存
    mSeries.append(series);
    // 显示
    //    ui->dataListWidget->addItem(title);
    QListWidgetItem* item = new QListWidgetItem(ui->dataListWidget);
    item->setData(Qt::UserRole, title);
    QCheckBox* box = new QCheckBox(title, this);
    box->setChecked(true);
    ui->dataListWidget->addItem(item);

    ui->dataListWidget->setItemWidget(item, box);
    connect(box, &QCheckBox::stateChanged, this, &ChartForm::changeSeriesVisiable);
}

创作不易,一键三连,以表鼓励
想要源码的可以私信,白嫖勿扰(一杯奶茶)

  • 14
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值