当前位置:网站首页>轮子五:QCustomPlot常用类
轮子五:QCustomPlot常用类
2022-07-21 23:09:00 【老赵的博客】
1.坐标标签类 QCPAxisTickerText
//调整X轴标签显示
QVector<QString> labels;
QVector<double> xPos;
m_xTickNumLess = 10;
labels.resize(m_xTickNumLess);
xPos.resize(m_xTickNumLess);
double posSpan = qFloor(1.0*histogramSize/m_xTickNumLess); //显示部分柱标签
double labelSpan = (maxPw-minPw)/histogramSize*posSpan;
for(int i = 0; i < m_xTickNumLess; i++){
xPos[i] = i*posSpan + 1 /*+ qFloor(posSpan/2.0)*/; //刻度位置挪到图中间
//柱标签为统计区间的中间位置所代表的值
labels[i] = QString::number(minPw + i*labelSpan /*+ (0.5+qFloor(posSpan/2.0))*(maxPw-minPw)/histogramSize*/, 'f', 2) + "us";
}
QSharedPointer<QCPAxisTickerText> xTicker(new QCPAxisTickerText);
xTicker->addTicks(xPos, labels);
ui->widget_pwStatisticsPlot->xAxis->setTicker(xTicker);
ui->widget_pwStatisticsPlot->replot();
2. QCPGraph类 画曲线 散点 空心点 类型选择
//先清空graph
ui->checkBox_scatterPoint->setCheckState(Qt::Checked);
ui->widget_freqStatisticsPlot->clearGraphs();
ui->widget_freqStatisticsPlot->clearPlottables();
//设置属性:散点
QCPGraph * curGraph = ui->widget_freqStatisticsPlot->addGraph();
curGraph->setLineStyle(QCPGraph::lsNone);
curGraph->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssDisc, 4));
//设置坐标标签 界面背景颜色
initTable(ui->widget_freqStatisticsPlot," ","频率(MHz)");
//设置点颜色
ui->widget_freqStatisticsPlot->graph()->setPen(QColor(Qt::yellow));
ui->widget_freqStatisticsPlot->replot();
3. QCPBars类 柱状图
QCPBars *bar = new QCPBars(ui->widget_freqStatisticsPlot->xAxis,
ui->widget_freqStatisticsPlot->yAxis);
bar->setWidthType(QCPBars::wtPlotCoords);
bar->setBrush(Qt::blue);
//计算绘图数据
QVector<double> index;
index.resize(histogramSize);
for(int i = 1; i <= histogramSize; i++){
index[i-1] = i; //x轴数据从1~histogramSize
}
bar->setData(index, values);
4. QCPRange类 坐标范围调整
//必须先rescale坐标轴,使得坐标轴按数据设置好后再进行调整
ui->widget_freqStatisticsPlot->rescaleAxes();
QCPRange xRange = ui->widget_freqStatisticsPlot->xAxis->range();
double barWidth = bar->width();
ui->widget_freqStatisticsPlot->xAxis->setRange(xRange.lower-0.5*barWidth,
xRange.upper+0.5*barWidth);
5.坐标自动 更新自定义标签
//设置刻度标签个数
m_nXTickerCnt = m_stInitSet.stX.nTickerCnt;
m_nYTickerCnt = m_stInitSet.stY.nTickerCnt;
//设置x轴QCPAxisTickerText
ui->FreqPlot->xAxis->ticker().clear();
m_pXaxisTicker.clear();
m_pXaxisTicker = QSharedPointer<QCPAxisTickerText>(new QCPAxisTickerText);
connect(ui->FreqPlot->xAxis, SIGNAL(rangeChanged(QCPRange)), this,
SLOT(slot_XaxisRangeChanged(QCPRange)),Qt::UniqueConnection);
ui->FreqPlot->xAxis->setTicker(m_pXaxisTicker);
void QCustomFrequencyPlot::slot_YaxisRangeChanged(QCPRange newRange)
{
double tickLen = newRange.size()/m_nYTickerCnt;//刻度标签间距
m_pYaxisTicker->clear();
QVector<double> ticks;//标签位置
QVector<QString> labels;//标签显示的值
for(int i=0; i<=m_nYTickerCnt; i++)
{
ticks.push_back(newRange.lower + i*tickLen);
#if 1 //Y轴刻度都加标签
labels.push_back(QString::number(newRange.lower + i*tickLen,'f',0));
#else //Y轴最上方刻度不加标签
if(m_nYTickerCnt != i)
{
labels.push_back(QString("%1").arg(newRange.lower + i*tickLen));
}
else
{
//labels.push_back(m_stInitSet.stY.strUnit);
}
#endif
}
m_pYaxisTicker->addTicks(ticks, labels);//更新刻度标签
}
6.QCPTextElement类,图表的标题
//载频统计分布图
int layoutRows = ui->widget_freqStatisticsPlot->plotLayout()->rowCount();
if(layoutRows == 1){ //只有在未添加标题时添加标题
QString strTitle;
strTitle = QStringLiteral("载频统计分布图");
QCPTextElement *title;
title = new QCPTextElement(ui->widget_freqStatisticsPlot, strTitle);
title->setTextColor(Qt::white);
ui->widget_freqStatisticsPlot->plotLayout()->insertRow(0);
ui->widget_freqStatisticsPlot->plotLayout()->addElement(0, 0, title);
}
7.设置 图表标签Legend
void init()
{
QStringList temp_title_list;
QVector<QColor> temp_color_list;
ui->widget_amplitude->legend->setVisible(true);
temp_title_list.clear();
temp_title_list<<"幅度(主)"<<"幅度(副)";
temp_color_list.clear();
temp_color_list<<QColor(211,231,47)<<QColor(28,111,249);
SetValueState(temp_title_list,temp_color_list);
}
void RadioDataForm::SetValueState(QStringList temp_title_list, QVector<QColor> color_list)
{
ui->widget_amplitude->addGraph();
ui->widget_amplitude->graph(i)->setName(temp_title_list.at(i));
title_list.append(temp_title_list.at(i));
QPen pen;
pen.setColor(color_list.at(i));
pen.setWidth(2);
ui->widget_amplitude->graph(i)->setPen(pen);
}
setLegendPosition(ui->widget_amplitude);
}
void RadioDataForm::setLegendPosition( QCustomPlot *plot )
{
plot->legend->setBrush(QColor(169,169,169));//设置图例背景
int count = plot->plotLayout()->rowCount();
QMargins marg(100,1,10,1);
plot->legend->addElement(0,1,plot->legend->item(1));
plot->legend->addElement(0,2,plot->legend->item(2));
marg.setLeft(200);
marg.setRight(200);
plot->legend->setMargins(marg);
plot->legend->setBorderPen(Qt::NoPen);
plot->plotLayout()->addElement(count,0,plot->legend);
plot->plotLayout()->setRowStretchFactor(count, 0.001);
}
边栏推荐
- SaaS service or privatization service for enterprise digital office?
- 同一个浏览器不同窗口登录不同账号,窗口切换时,页面刷新账号变更为最后一次登录的账号
- What if Lao Xue's host disk space is full
- 【等保小知识】等保整改是什么意思?整改内容包括哪些?
- 如何将沥青高位槽液位数值无线传输至载热体记录仪监测?
- 2022年数据库审计产品排行榜-必看!
- Coordinate system in QT
- 深浅拷贝
- 制药机械行业供应链协同管理系统:全链路数字化覆盖,实现产业供应链可视化
- JVM(9)之JVM对象创建与内存分配深度剖析
猜你喜欢
随机推荐
深浅拷贝
我的创作纪念日
2022/07/20---把字符串转换成整数; 滑动窗口的最大值
[pan micro ecology] compiling_ jsp/_ login/_ upgrademessage...
Recordrtc video recording, playback, screenshot, Download
同一个浏览器不同窗口登录不同账号,窗口切换时,页面刷新账号变更为最后一次登录的账号
Typescript - syntax introduction
Use of watch in projects
ClickHouse引擎之-MaterializeMYSQL
Qt 使用 Google Breakpad 捕获程序崩溃报告(dump文件)
Qt中的坐标系统
One bite of Stream(9)
Supply chain collaborative management system of pharmaceutical machinery industry: full link digital coverage to realize the visualization of industrial supply chain
"Xiaodeng in operation and maintenance" ensures gdpr compliance by auditing user activities and internal changes in the ad domain
617. 合并二叉树
老薛主机磁盘空间满了怎么办
如何安装mysql
图表绘制总结
Go list 修改元素值
2022年数据库审计产品排行榜-必看!