Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Chinese
  4. Qchart 中数据显示的问题。
Forum Update on Monday, May 27th 2025

Qchart 中数据显示的问题。

Scheduled Pinned Locked Moved Solved Chinese
7 Posts 2 Posters 7.6k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • S Offline
    S Offline
    sildtfine
    wrote on last edited by
    #1

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

    FlotisableF 1 Reply Last reply
    0
    • S sildtfine

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

      FlotisableF Offline
      FlotisableF Offline
      Flotisable
      wrote on last edited by
      #2

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

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

      S 1 Reply Last reply
      0
      • FlotisableF Flotisable

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

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

        S Offline
        S Offline
        sildtfine
        wrote on last edited by
        #3

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

        FlotisableF 1 Reply Last reply
        0
        • S sildtfine

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

          FlotisableF Offline
          FlotisableF Offline
          Flotisable
          wrote on last edited by
          #4

          @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座標找出線上的點)

          1 Reply Last reply
          0
          • S Offline
            S Offline
            sildtfine
            wrote on last edited by
            #5

            好像可行,我等会试一下,不过想想QChart居然没有现成的函数可以做这种事,是有点郁闷,在我们的应用中,一个时间点上,两三个通道的值的显示是很常见的事。

            FlotisableF 1 Reply Last reply
            0
            • S sildtfine

              好像可行,我等会试一下,不过想想QChart居然没有现成的函数可以做这种事,是有点郁闷,在我们的应用中,一个时间点上,两三个通道的值的显示是很常见的事。

              FlotisableF Offline
              FlotisableF Offline
              Flotisable
              wrote on last edited by
              #6

              @sildtfine
              可能是因為QtCharts這個module還不太成熟吧,我覺得在文檔方面它 還沒有寫的像其他module詳細

              也可能只是我們沒找到那個功能,或者你可以向qt提出要求讓它更完善,關於feature request

              S 1 Reply Last reply
              0
              • FlotisableF Flotisable

                @sildtfine
                可能是因為QtCharts這個module還不太成熟吧,我覺得在文檔方面它 還沒有寫的像其他module詳細

                也可能只是我們沒找到那個功能,或者你可以向qt提出要求讓它更完善,關於feature request

                S Offline
                S Offline
                sildtfine
                wrote on last edited by
                #7

                @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;
                                }
                            }
                
                1 Reply Last reply
                0

                • Login

                • Login or register to search.
                • First post
                  Last post
                0
                • Categories
                • Recent
                • Tags
                • Popular
                • Users
                • Groups
                • Search
                • Get Qt Extensions
                • Unsolved