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();
通過以上屬性和方法的組合,可以創建高度可定制的金融圖表,滿足股票、期貨等金融數據的可視化需求。