1. 可直接使用,使用场景:画散点图时,需要显示多个点,但是横坐标标签全部显示的话,就会拥挤,故事用这个方法
//设置坐标
QVector<QString>xLable;
QVector<double>xpos;
int num = 10;
xLable.resize(num);
xpos.resize(num);
int xmin = m_freValue_list.time_t_vector.first();
int xmax = m_freValue_list.time_t_vector.last();
double xspan = (xmax+1 - xmin)/num;
for(int i=0;i<num;i++)
{
xpos.append(xmin+i*xspan);
xLable.append(QString::number(xmin+i*xspan));
}
QSharedPointer<QCPAxisTickerText> xaixsTicker = QSharedPointer<QCPAxisTickerText>(new QCPAxisTickerText);
xaixsTicker->addTicks(xpos,xLable);
ui->widget_freqStatisticsPlot->xAxis->setTicker(xaixsTicker);
ui->widget_freqStatisticsPlot->xAxis->setRange(m_FreScatterNum-MAX_POINT_NUM+1,m_FreScatterNum+1);
ui->widget_freqStatisticsPlot->replot();
2.需要将横坐标贴上标签
//设置坐标
QVector<QString>xLable;
QVector<double>xpos;
int num = 10;
xLable.resize(num);
int xmin = 0;
int xmax = 4096;//频域图绘制4096个点
double xspan = (xmax+1 - xmin)/num;
xpos.resize(num);
for(int i=0;i<num;i++)
{
xpos.append(xmin+i*xspan);
xLable.append(QString::number((xmin+i*xspan)/210.0,'f',1));
}
QSharedPointer<QCPAxisTickerText> xaixsTicker = QSharedPointer<QCPAxisTickerText>(new QCPAxisTickerText);
xaixsTicker->addTicks(xpos,xLable);
ui->FreqPlot->xAxis->setTicker(xaixsTicker);
ui->FreqPlot->xAxis->setRange(0,4096);
ui->FreqPlot->replot();
注意:此方法在支持缩放的图形中,会出现问题,需要配合,在 槽函数中
connect(ui->FreqPlot->xAxis, SIGNAL(rangeChanged(QCPRange)), this, SLOT(slot_XaxisRangeChanged(QCPRange)),Qt::UniqueConnection);
void QCustomFrequencyPlot::slot_XaxisRangeChanged(QCPRange newRange)
{
double tickLen = newRange.size()/m_nXTickerCnt;//刻度标签间距
m_pXaxisTicker->clear();
QVector<double> ticks;//标签位置
QVector<QString> labels;//标签显示的值
for(int i=0; i<=m_nXTickerCnt; i++)
{
ticks.push_back(newRange.lower + i*tickLen);
if(m_stInitSet.stX.strUnit == "")//X轴单位标签为空,则坐标轴都加上标签刻度
{
labels.push_back(QString::number(newRange.lower + i*tickLen,'f',0));
//labels.push_back(QString("%1").arg(newRange.lower + i*tickLen));
}
else //如果X轴单位标签不为空,X轴最右边的标签位置不设,留着作为单位标签显示
{
if(i != m_nXTickerCnt)
{
labels.push_back(QString::number(newRange.lower + i*tickLen,'f',0));
}
else
{
labels.push_back(m_stInitSet.stX.strUnit);
}
}
}
m_pXaxisTicker->addTicks(ticks, labels);//更新刻度标签
}
版权声明:本文为sinat_20962951原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。