具备功能
图标字体颜色,横纵轴的修改,数据的选择,主题的变换,放大缩小等等
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);
}
创作不易,一键三连,以表鼓励
想要源码的可以私信,白嫖勿扰(一杯奶茶)