坐标轴刻度QCPAxisTicker
一、QCPAxisTicker 概述
QCPAxisTicker 是 QCustomPlot 中控制坐标轴刻度生成和显示的基类,负责计算刻度位置和生成刻度标签。
二、主要派生类
类名 | 描述 |
---|---|
QCPAxisTickerFixed | 固定步长的刻度生成器 |
QCPAxisTickerLog | 对数坐标刻度生成器 |
QCPAxisTickerPi | 专门显示π倍数的刻度生成器 |
QCPAxisTickerText | 自定义文本标签的刻度生成器 |
QCPAxisTickerDateTime | 日期时间刻度生成器 |
QCPAxisTickerTime | 时间刻度生成器 |
三、QCPAxisTicker 核心属性
属性 | 类型 | 描述 |
---|---|---|
tickCount | int | 期望的刻度数量(近似) |
tickOrigin | double | 刻度起始参考点 |
tickStepStrategy | TickStepStrategy | 刻度步长策略 |
四、QCPAxisTicker 常用方法
1. 基本配置方法
方法 | 参数 | 返回值 | 描述 |
---|---|---|---|
setTickCount | int count | void | 设置期望刻度数量 |
setTickOrigin | double origin | void | 设置刻度起始点 |
setTickStepStrategy | TickStepStrategy strategy | void | 设置步长策略 |
2. 刻度生成方法
方法 | 参数 | 返回值 | 描述 |
---|---|---|---|
generate | const QCPRange &range, const QLocale &locale, QChar formatChar, int precision | QVector<double> | 生成刻度位置 |
getTickLabel | double tick, const QLocale &locale, QChar formatChar, int precision | QString | 获取刻度标签 |
getSubTickCount | double tickStep | int | 获取子刻度数量 |
getTickStep | const QCPRange &range | double | 计算刻度步长 |
五、QCPAxisTickerFixed 专用方法
方法 | 参数 | 描述 |
---|---|---|
setTickStep | double step | 设置固定刻度步长 |
setScaleStrategy | ScaleStrategy strategy | 设置缩放策略 |
六、QCPAxisTickerLog 专用方法
方法 | 参数 | 描述 |
---|---|---|
setLogBase | double base | 设置对数底数 |
setSubTickCount | int subTicks | 设置子刻度数量 |
七、QCPAxisTickerDateTime 专用方法
方法 | 参数 | 描述 |
---|---|---|
setDateTimeFormat | const QString &format | 设置日期时间格式 |
setDateTimeSpec | const Qt::TimeSpec &spec | 设置时区规范 |
八、枚举类型
1. TickStepStrategy 刻度步长策略
值 | 描述 |
---|---|
tssReadability | 优先考虑可读性 |
tssMeetTickCount | 优先满足刻度数量 |
2. ScaleStrategy (QCPAxisTickerFixed)
值 | 描述 |
---|---|
ssNone | 不自动调整 |
ssMultiples | 调整为步长的整数倍 |
ssPowers | 调整为步长的幂次 |
九、基础使用示例
cpp
// 使用固定步长刻度
QSharedPointer<QCPAxisTickerFixed> fixedTicker(new QCPAxisTickerFixed);
fixedTicker->setTickStep(0.5); // 每0.5单位一个刻度
fixedTicker->setScaleStrategy(QCPAxisTickerFixed::ssMultiples);
customPlot->xAxis->setTicker(fixedTicker);// 使用对数刻度
QSharedPointer<QCPAxisTickerLog> logTicker(new QCPAxisTickerLog);
logTicker->setLogBase(10);
logTicker->setSubTickCount(8);
customPlot->yAxis->setTicker(logTicker);// 使用日期时间刻度
QSharedPointer<QCPAxisTickerDateTime> dateTicker(new QCPAxisTickerDateTime);
dateTicker->setDateTimeFormat("yyyy-MM-dd\nhh:mm:ss");
customPlot->xAxis->setTicker(dateTicker);
十、高级用法示例
1. 自定义文本标签
cpp
QSharedPointer<QCPAxisTickerText> textTicker(new QCPAxisTickerText);
textTicker->addTick(1, "低");
textTicker->addTick(5, "中");
textTicker->addTick(10, "高");
customPlot->yAxis->setTicker(textTicker);
2. 自定义刻度生成器
cpp
class CustomTicker : public QCPAxisTicker {
public:virtual QString getTickLabel(double tick, const QLocale &locale, QChar formatChar, int precision) override {if (tick == 0) return "零";else if (tick > 0) return QString("+%1").arg(tick);else return QString("-%1").arg(-tick);}
};QSharedPointer<CustomTicker> customTicker(new CustomTicker);
customPlot->xAxis->setTicker(customTicker);
3. 动态调整刻度密度
cpp
connect(customPlot->xAxis, &QCPAxis::rangeChanged, [=](const QCPRange &range){if (range.size() > 100) {fixedTicker->setTickStep(10);} else {fixedTicker->setTickStep(1);}
});
十一、性能优化技巧
-
简化刻度标签:
cpp
dateTicker->setDateTimeFormat("MM-dd"); // 使用更短的日期格式
-
减少刻度数量:
cpp
fixedTicker->setTickCount(5); // 限制最大刻度数
-
关闭子刻度:
cpp
logTicker->setSubTickCount(0); // 不显示子刻度
QCPAxisTicker 提供了高度灵活的刻度控制系统,可以满足各种专业图表的坐标轴需求。通过选择合适的派生类并合理配置,可以实现精确的刻度控制和美观的标签显示。