Qchart 在QChartView 和QGraphicsview中的zoom区别



  • 我参照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);
        ......
    }
    


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



  • @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了。



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

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

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



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


Log in to reply