Qt QLogValueAxis详解
1、概述
QLogValueAxis 是 Qt 图表模块(Qt Charts)中的一个类,用于在图表中创建对数刻度的数值轴。与线性刻度的 QValueAxis 不同,QLogValueAxis 采用对数刻度,特别适合展示范围跨度极大的数据(如从 1 到 1000000 的数据),能够更清晰地呈现数据的相对变化趋势。
QLogValueAxis 继承自 QAbstractAxis,可与各种图表系列(如折线图、散点图等)配合使用,通常用于科学数据可视化、金融数据展示等场景。使用时需要注意,对数轴不能包含零或负值,因为对数函数在这些值上没有定义。
2、重要方法
qreal base() const
:返回对数的底数(默认为 10)void setBase(qreal base)
:设置对数的底数(必须大于 0 且不等于 1)qreal min() const
:返回轴的最小值void setMin(qreal min)
:设置轴的最小值(必须为正数)qreal max() const
:返回轴的最大值void setMax(qreal max)
:设置轴的最大值(必须为正数且大于最小值)void setRange(qreal min, qreal max)
:同时设置轴的最小值和最大值int tickCount() const
:返回刻度数量void setTickCount(int count)
:设置刻度数量QString labelFormat() const
:返回轴标签的格式字符串void setLabelFormat(const QString &format)
:设置轴标签的格式字符串(如 "%.2f" 表示保留两位小数)void applyNiceNumbers()
:自动调整轴范围以显示更美观的刻度
3、信号
void baseChanged(qreal base)
:当对数的底数发生变化时发射void minChanged(qreal min)
:当轴的最小值发生变化时发射void maxChanged(qreal max)
:当轴的最大值发生变化时发射void rangeChanged(qreal min, qreal max)
:当轴的范围(最小值或最大值)发生变化时发射void tickCountChanged(int tickCount)
:当刻度数量发生变化时发射void labelFormatChanged(const QString &format)
:当标签格式发生变化时发射
4、C++ 实例
#include <QApplication>
#include <QtCharts/QChartView>
#include <QtCharts/QLineSeries>
#include <QtCharts/QValueAxis>
#include <QtCharts/QAreaSeries>
#include <QLegend>
#include <QHCandlestickModelMapper>QT_CHARTS_USE_NAMESPACEint main(int argc, char *argv[])
{QApplication a(argc, argv);// 创建一个线性数据系列QLineSeries *series = new QLineSeries();*series << QPointF(1, 1) << QPointF(2, 10) << QPointF(3, 100) << QPointF(4, 1000) << QPointF(5, 10000);// 创建图表对象QChart *chart = new QChart();chart->addSeries(series);chart->setTitle("对数坐标轴示例");// 创建对数坐标轴(X 轴)QLogValueAxis *axisX = new QLogValueAxis();axisX->setBase(10); // 设置底数为 10axisX->setRange(1, 5); // 设置 X 轴的显示范围(对数坐标)// 创建线性坐标轴(Y 轴)QLogValueAxis *axisY = new QLogValueAxis();axisY->setBase(10); // 设置底数为 10axisY->setRange(1, 10000); // 设置 Y 轴的显示范围(对数坐标)// 将坐标轴添加到图表chart->setAxisX(axisX, series);chart->setAxisY(axisY, series);// 创建图表视图,并将图表添加到视图中QChartView *chartView = new QChartView(chart);chartView->setRenderHint(QPainter::Antialiasing);// 创建窗口并设置窗口内容QWidget window;QVBoxLayout *layout = new QVBoxLayout();layout->addWidget(chartView);window.setLayout(layout);window.setWindowTitle("Qt 对数坐标轴示例");window.resize(600, 400);window.show();return a.exec();
}
觉得有帮助的话,打赏一下呗。。
需要商务合作(定制程序)的欢迎私信!!