Qchart 中数据显示的问题。



  • 我的程序中有多个数据,使用QLineSeries添加,但是它们的x坐标是一致的,都是同一个时间点采集的不同通道的数据,我现在想实现
    在某一时间点点击后,显示同一时间点的不同通道的数据,我该怎么实现呢?



  • @sildtfine
    如果你的時間是x座標的話,你可以reimplement QChartmousePressEvent或是mouseReleaseEvent, 然後利用QChart::mapToValueeventpos轉換成相對應series的point,我想這樣應該能取得相對應時間點的資料

    參考文檔:QChart::mapToValue, mousePressEvent, mouseReleaseEvent, event



  • @Flotisable 谢谢你的回复,你的思路我能理解。不过我的问题是这样的,同一个时间点,不同通道的值是不一样的,就是纵坐标不一致的,比如我在一个series上单击,获取到该series的点的pos,但是我没办法将其转换为另一个series的同一横坐标的pos?它的纵坐标我怎么知道呢?
    alt text如图,我可以知道一个series上的点及值,但是红色线延伸出去上的另一点怎么知道呢?可以说到更详细点吗?谢谢!



  • @sildtfine
    阿,不好意思,我以為QChart::mapToValue可以取得series上的值
    目前看來好像沒有辦法直接用series的api以x座標去取得series上的y座標

    我是有一個方案,但測試之後取得的數值和series上的數值會有些微的偏差,如果你不在意的話,這個方式應該可以

    當使用者在QChart上點擊時mousePressEventmouseReleaseEvent會被觸發傳遞一個QGraphicsSceneMouseEvent
    先利用QChart::mapToValueQGraphicsSceneEventEventpos轉成相對應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;
                    }
                }
    

Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.