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区别
Forum Updated to NodeBB v4.3 + New Features

Qchart 在QChartView 和QGraphicsview中的zoom区别

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