使用QCutomPlot做的读取txt文件显示频谱图的demo,帮助大家了解QCustomPlot的基本使用
1.运行结果
demo比较简单,用于文件读取,鼠标放大缩小,右键截图等基础功能.
2.绘图详解
绘图核心是将类提升为QCustomPlot之后进行重绘,重绘之前设计图表曲线,图标标题,坐标轴,坐标轴范围,背景颜色,网格线样式,刻度样式等.
初始化绘图代码如下:
void MainWindow::setupSpectrumPlot()
{
// 设置图表曲线
ui->widget->addGraph();
ui->widget->graph(0)->setPen(QPen(Qt::blue));
ui->widget->graph(0)->setBrush(QBrush(QColor(0, 0, 255, 20)));
ui->widget->plotLayout()->insertRow(0);
QCPTextElement *title = new QCPTextElement(ui->widget, "频谱示例", QFont("微软雅黑", 12, QFont::Bold));
ui->widget->plotLayout()->addElement(0, 0, title);
// 设置坐标轴标签
ui->widget->xAxis->setLabel("频率");
ui->widget->yAxis->setLabel("幅度");
// 设置坐标轴范围
ui->widget->xAxis->setRange(0, 100);
ui->widget->yAxis->setRange(0, 1);
// 设置背景颜色
ui->widget->setBackground(QBrush(Qt::white));
// 设置网格线样式
ui->widget->xAxis->grid()->setPen(QPen(Qt::gray, 0.5, Qt::DotLine));
ui->widget->yAxis->grid()->setPen(QPen(Qt::gray, 0.5, Qt::DotLine));
ui->widget->xAxis->grid()->setSubGridPen(QPen(Qt::lightGray, 0.2, Qt::DotLine));
ui->widget->yAxis->grid()->setSubGridPen(QPen(Qt::lightGray, 0.2, Qt::DotLine));
ui->widget->xAxis->grid()->setSubGridVisible(true);
ui->widget->yAxis->grid()->setSubGridVisible(true);
// 设置坐标轴刻度样式
ui->widget->xAxis->setTickPen(QPen(Qt::black, 1));
ui->widget->yAxis->setTickPen(QPen(Qt::black, 1));
ui->widget->xAxis->setSubTickPen(QPen(Qt::black, 0.5));
ui->widget->yAxis->setSubTickPen(QPen(Qt::black, 0.5));
// 启用抗锯齿
ui->widget->setAntialiasedElements(QCP::aeAll);
// ============ 十字线初始化 ============
// 水平线
crosshairH = new QCPItemStraightLine(ui->widget);
crosshairH->setPen(QPen(QColor(150, 150, 150), 1, Qt::DashLine));
crosshairH->setVisible(false);
// 垂直线
crosshairV = new QCPItemStraightLine(ui->widget);
crosshairV->setPen(QPen(QColor(150, 150, 150), 1, Qt::DashLine));
crosshairV->setVisible(false);
// 坐标标签
coordText = new QCPItemText(ui->widget);
coordText->setPositionAlignment(Qt::AlignLeft|Qt::AlignTop);
coordText->position->setType(QCPItemPosition::ptAxisRectRatio);
coordText->position->setCoords(0.02, 0.02); // 左上角
coordText->setText("X: -, Y: -");
coordText->setTextAlignment(Qt::AlignLeft);
coordText->setFont(QFont(font().family(), 9));
coordText->setPadding(QMargins(5, 5, 5, 5));
coordText->setBrush(QBrush(QColor(255, 255, 255, 200)));
coordText->setPen(QPen(QColor(100, 100, 100)));
ui->widget->replot();
}