Solved Qchart 中数据显示的问题。
-
我的程序中有多个数据,使用QLineSeries添加,但是它们的x坐标是一致的,都是同一个时间点采集的不同通道的数据,我现在想实现
在某一时间点点击后,显示同一时间点的不同通道的数据,我该怎么实现呢? -
@sildtfine
如果你的時間是x座標的話,你可以reimplementQChart
的mousePressEvent
或是mouseReleaseEvent
, 然後利用QChart::mapToValue
將event
的pos
轉換成相對應series的point,我想這樣應該能取得相對應時間點的資料參考文檔:QChart::mapToValue, mousePressEvent, mouseReleaseEvent, event
-
@Flotisable 谢谢你的回复,你的思路我能理解。不过我的问题是这样的,同一个时间点,不同通道的值是不一样的,就是纵坐标不一致的,比如我在一个series上单击,获取到该series的点的pos,但是我没办法将其转换为另一个series的同一横坐标的pos?它的纵坐标我怎么知道呢?
如图,我可以知道一个series上的点及值,但是红色线延伸出去上的另一点怎么知道呢?可以说到更详细点吗?谢谢! -
@sildtfine
阿,不好意思,我以為QChart::mapToValue
可以取得series上的值
目前看來好像沒有辦法直接用series的api以x座標去取得series上的y座標我是有一個方案,但測試之後取得的數值和series上的數值會有些微的偏差,如果你不在意的話,這個方式應該可以
當使用者在
QChart
上點擊時mousePressEvent
和mouseReleaseEvent
會被觸發傳遞一個QGraphicsSceneMouseEvent
先利用QChart::mapToValue
將QGraphicsSceneEventEvent
的pos
轉成相對應series的座標,假設為point
再利用QXYSeries::pointVector
取得lineseries上的points(可能需要排序一下),找出point.x()
在哪兩個點之間
最後藉由數學計算去取得point.x()
在series上y座標的值(因為是用lineseries,所以可以用直線的斜率,端點,x座標找出線上的點) -
好像可行,我等会试一下,不过想想QChart居然没有现成的函数可以做这种事,是有点郁闷,在我们的应用中,一个时间点上,两三个通道的值的显示是很常见的事。
-
@sildtfine
可能是因為QtCharts這個module還不太成熟吧,我覺得在文檔方面它 還沒有寫的像其他module詳細也可能只是我們沒找到那個功能,或者你可以向qt提出要求讓它更完善,關於feature request
-
@Flotisable 那个方法可行,唯一的缺点就是要遍历数据,不用QVector,直接用series的索引就行了,谢谢啦!
for(int i=0;i<series1->count();++i) { if(series1->at(i).x()<y) { b1=series1->at(i).x(); } else if(series1->at(i).x()>y) { b2=series1->at(i).x(); qDebug()<<"ceshi"; break; } }