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 中数据显示的问题。
Qt 6.11 is out! See what's new in the release blog

Qchart 中数据显示的问题。

Scheduled Pinned Locked Moved Solved Chinese
7 Posts 2 Posters 8.3k Views 1 Watching
  • 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