QCPFinancial 是 QCustomPlot 中用于绘制金融图表(如蜡烛图/K线图)的核心类。以下是其关键特性的详细说明:
一、主要属性
属性 | 类型 | 说明 |
---|---|---|
data | QSharedPointer<QCPFinancialDataContainer> | 存储金融数据的数据容器 |
chartStyle | QCPFinancial::ChartStyle | 设置图表样式(蜡烛图/美国线等) |
width | double | 每个数据项的宽度(0-1之间) |
twoColored | bool | 是否使用两种颜色区分涨跌(默认true) |
positive | QCPScatterStyle | 上涨时的样式(颜色、形状等) |
negative | QCPScatterStyle | 下跌时的样式 |
二、核心方法
1. 数据操作方法
方法 | 参数 | 返回值 | 说明 |
---|---|---|---|
setData | QSharedPointer<QCPFinancialDataContainer> data | void | 设置完整数据集 |
addData | const QVector<double>& keys, const QVector<double>& open, const QVector<double>& high, const QVector<double>& low, const QVector<double>& close | void | 批量添加数据 |
addData | double key, double open, double high, double low, double close | void | 添加单个数据点 |
dataCount | - | int | 返回数据点数量 |
2. 样式配置方法
方法 | 参数 | 返回值 | 说明 |
---|---|---|---|
setChartStyle | QCPFinancial::ChartStyle style | void | 设置图表类型 |
setWidth | double width | void | 设置柱体宽度 |
setTwoColored | bool enabled | void | 启用/禁用双色模式 |
setPen | const QPen& pen | void | 设置统一线条颜色 |
setPositive | const QPen& pen | void | 设置上涨颜色 |
setNegative | const QPen& pen | void | 设置下跌颜色 |
3. 数据查询方法
方法 | 参数 | 返回值 | 说明 |
---|---|---|---|
getKeyRange | bool& foundRange, SignDomain inSignDomain = sdBoth | QCPRange | 获取键值范围 |
getValueRange | bool& foundRange, SignDomain inSignDomain = sdBoth | QCPRange | 获取数值范围 |
selectTest | const QPointF& pos, bool onlySelectable, QVariant* details = nullptr | double | 选择测试 |
三、信号列表
信号 | 参数 | 说明 |
---|---|---|
selectionChanged | bool selected | 选中状态改变时触发 |
selectableChanged | bool selectable | 可选状态改变时触发 |
四、枚举类型
QCPFinancial::ChartStyle
值 | 说明 |
---|---|
csOhlc | 美国线(开盘-高-低-收盘) |
csCandlestick | 蜡烛图(默认) |
五、基本使用示例
cpp
// 创建金融图表
QCPFinancial *candlesticks = new QCPFinancial(customPlot->xAxis, customPlot->yAxis);
// 设置样式为蜡烛图
candlesticks->setChartStyle(QCPFinancial::csCandlestick);
candlesticks->setWidth(0.5); // 设置宽度为时间间隔的50%
// 设置颜色
candlesticks->setPositive(QPen(Qt::green));
candlesticks->setNegative(QPen(Qt::red));
// 添加数据 (key, open, high, low, close)
QVector<double> keys, open, high, low, close;
// ... 填充数据 ...
candlesticks->addData(keys, open, high, low, close);
// 连接选择信号
connect(candlesticks, &QCPFinancial::selectionChanged, [](bool selected) {
qDebug() << "K线图选择状态改变:" << selected;
});
六、高级技巧
1、自定义工具提示:
cpp
connect(customPlot, &QCustomPlot::plottableClick, [](QCPAbstractPlottable *plottable, int dataIndex, QMouseEvent *event) {
if (auto financial = qobject_cast<QCPFinancial*>(plottable)) {
auto data = financial->data()->at(dataIndex);
QToolTip::showText(event->globalPos(),
QString("日期: %1\n开盘: %2\n最高: %3\n最低: %4\n收盘: %5")
.arg(data->key).arg(data->open)
.arg(data->high).arg(data->low)
.arg(data->close));
}
});
2、动态更新数据:
cpp
// 更新特定位置的数据
candlesticks->data()->at(index)->close = newCloseValue;
candlesticks->data()->at(index)->high = qMax(candlesticks->data()->at(index)->high, newCloseValue);
customPlot->replot();
通过以上属性和方法的组合,可以创建高度可定制的金融图表,满足股票、期货等金融数据的可视化需求。