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 在QChartView 和QGraphicsview中的zoom区别
Qt 6.11 is out! See what's new in the release blog

Qchart 在QChartView 和QGraphicsview中的zoom区别

Scheduled Pinned Locked Moved Solved Chinese
5 Posts 2 Posters 8.1k 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

    我参照QT给的zoomlinechart的例子做了一个缩放Qchart的程序,结果出了点问题。
    官方给的例子QChart是放置在QChartView中的,缩放的时候,窗口尺寸不受影响。
    而我自己的是放在QGraphicsview中,放大的话,窗口边缘会出现滚动条,有谁知道,这是什么问题嘛?
    这是案例的代码:

    Chart *chart = new Chart();
        chart->addSeries(series);
        chart->setTitle("Zoom in/out example");
        chart->setAnimationOptions(QChart::SeriesAnimations);
        chart->legend()->hide();
        chart->createDefaultAxes();
    
        ChartView *chartView = new ChartView(chart);
        chartView->setRenderHint(QPainter::Antialiasing);
    
        QMainWindow window;
        window.setCentralWidget(chartView);
        window.resize(400, 300);
        window.grabGesture(Qt::PanGesture);
        window.grabGesture(Qt::PinchGesture);
        window.show();
    
        return a.exec();
    

    这是我自己的代码:

    if(!Test)
             {
                 delete Test;
                 Test=nullptr;
                 Test=new Baseview(ReturnData(),0);
                 Test->setRenderHint(QPainter::Antialiasing);
                 //Test->setMinimumSize(640,480);
                 this->resize(600,600);
                 this->setCentralWidget(Test);
             }
             else
             {
                 Test=new Baseview(ReturnData(),0);
                 Test->setRenderHint(QPainter::Antialiasing);
                 //Test->setMinimumSize(640,480);
                 this->setCentralWidget(Test);
    
             }
    
    Baseview::Baseview(const QStringList &clist,QWidget *parent):QGraphicsView(new QGraphicsScene,parent),IsPressed(false),pPos(0,0)
    {
    
        ........
    
        m_chart=new QChart;
      .......
    
        scene()->addItem(m_chart);
        ......
    }
    
    FlotisableF 1 Reply Last reply
    0
    • S sildtfine

      我参照QT给的zoomlinechart的例子做了一个缩放Qchart的程序,结果出了点问题。
      官方给的例子QChart是放置在QChartView中的,缩放的时候,窗口尺寸不受影响。
      而我自己的是放在QGraphicsview中,放大的话,窗口边缘会出现滚动条,有谁知道,这是什么问题嘛?
      这是案例的代码:

      Chart *chart = new Chart();
          chart->addSeries(series);
          chart->setTitle("Zoom in/out example");
          chart->setAnimationOptions(QChart::SeriesAnimations);
          chart->legend()->hide();
          chart->createDefaultAxes();
      
          ChartView *chartView = new ChartView(chart);
          chartView->setRenderHint(QPainter::Antialiasing);
      
          QMainWindow window;
          window.setCentralWidget(chartView);
          window.resize(400, 300);
          window.grabGesture(Qt::PanGesture);
          window.grabGesture(Qt::PinchGesture);
          window.show();
      
          return a.exec();
      

      这是我自己的代码:

      if(!Test)
               {
                   delete Test;
                   Test=nullptr;
                   Test=new Baseview(ReturnData(),0);
                   Test->setRenderHint(QPainter::Antialiasing);
                   //Test->setMinimumSize(640,480);
                   this->resize(600,600);
                   this->setCentralWidget(Test);
               }
               else
               {
                   Test=new Baseview(ReturnData(),0);
                   Test->setRenderHint(QPainter::Antialiasing);
                   //Test->setMinimumSize(640,480);
                   this->setCentralWidget(Test);
      
               }
      
      Baseview::Baseview(const QStringList &clist,QWidget *parent):QGraphicsView(new QGraphicsScene,parent),IsPressed(false),pPos(0,0)
      {
      
          ........
      
          m_chart=new QChart;
        .......
      
          scene()->addItem(m_chart);
          ......
      }
      
      FlotisableF Offline
      FlotisableF Offline
      Flotisable
      wrote on last edited by
      #2

      @sildtfine
      你是用QGraphicsView的zoom去放大QChart嗎?
      如果是的話,Qt Zoom Line Example是用QChart本身提供的zoom
      兩個實作應該是不一樣的
      QGraphicsView的zoom是將整個QGraphicsScene縮放( 包括被放在裡面的QChart )
      QChart的zoom只將它裡面的chart縮放

      S 1 Reply Last reply
      0
      • FlotisableF Flotisable

        @sildtfine
        你是用QGraphicsView的zoom去放大QChart嗎?
        如果是的話,Qt Zoom Line Example是用QChart本身提供的zoom
        兩個實作應該是不一樣的
        QGraphicsView的zoom是將整個QGraphicsScene縮放( 包括被放在裡面的QChart )
        QChart的zoom只將它裡面的chart縮放

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

        @Flotisable
        我不是很好理解你的意思。
        但是代码如下,在官方案例中是这样写的:

        void ChartView::keyPressEvent(QKeyEvent *event)
          {
              switch (event->key()) {
              case Qt::Key_Plus:
                  chart()->zoomIn();
                  break;
              case Qt::Key_Minus:
                  chart()->zoomOut();
                  break;
        

        我只是用成员m_chart来缩放的

        void Baseview::keyPressEvent(QKeyEvent *event)
        {
            switch (event->key()) {
            case Qt::Key_Plus:
                m_chart->zoomIn();
                //qDebug()<<"IN";
                break;
            case Qt::Key_Minus:
                m_chart->zoomOut();
                //qDebug()<<"Out";
                break;
        }
        

        但这样做的结果就是窗口变化了(看上去是的,放大的话边缘出现滚动条了)
        所以想问问,后面看到QChartView中写道:
        Inherits:
        QGraphicsView
        我想在QGraphicsView能做的,估计QChartView也能做,我就直接用QChartView了。

        FlotisableF 1 Reply Last reply
        0
        • S sildtfine

          @Flotisable
          我不是很好理解你的意思。
          但是代码如下,在官方案例中是这样写的:

          void ChartView::keyPressEvent(QKeyEvent *event)
            {
                switch (event->key()) {
                case Qt::Key_Plus:
                    chart()->zoomIn();
                    break;
                case Qt::Key_Minus:
                    chart()->zoomOut();
                    break;
          

          我只是用成员m_chart来缩放的

          void Baseview::keyPressEvent(QKeyEvent *event)
          {
              switch (event->key()) {
              case Qt::Key_Plus:
                  m_chart->zoomIn();
                  //qDebug()<<"IN";
                  break;
              case Qt::Key_Minus:
                  m_chart->zoomOut();
                  //qDebug()<<"Out";
                  break;
          }
          

          但这样做的结果就是窗口变化了(看上去是的,放大的话边缘出现滚动条了)
          所以想问问,后面看到QChartView中写道:
          Inherits:
          QGraphicsView
          我想在QGraphicsView能做的,估计QChartView也能做,我就直接用QChartView了。

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

          @sildtfine
          我後來發現,用QGraphicsView放大會出現滾輪是因為當QChart zoomIn 的時候QGraphicsScene的sceneRect會變大

          而QGraphicsView 預設如果QGraphicsScene 的sceneRect 太大,便會出現滾動條。如果要解決是可以手動用QGraphicsView::setSceneRect來處理

          我想QChartView應該是已經處理這方面的問題了

          S 1 Reply Last reply
          0
          • FlotisableF Flotisable

            @sildtfine
            我後來發現,用QGraphicsView放大會出現滾輪是因為當QChart zoomIn 的時候QGraphicsScene的sceneRect會變大

            而QGraphicsView 預設如果QGraphicsScene 的sceneRect 太大,便會出現滾動條。如果要解決是可以手動用QGraphicsView::setSceneRect來處理

            我想QChartView應該是已經處理這方面的問題了

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

            @Flotisable 好的,谢谢,我已经改用QChartView了。

            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