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); ...... }
-
我参照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縮放 -
@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了。 -
@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 的時候QGraphicsScene
的sceneRect
會變大而
QGraphicsView
預設如果QGraphicsScene
的sceneRect
太大,便會出現滾動條。如果要解決是可以手動用QGraphicsView::setSceneRect
來處理我想
QChartView
應該是已經處理這方面的問題了 -
@sildtfine
我後來發現,用QGraphicsView
放大會出現滾輪是因為當QChart
zoomIn 的時候QGraphicsScene
的sceneRect
會變大而
QGraphicsView
預設如果QGraphicsScene
的sceneRect
太大,便會出現滾動條。如果要解決是可以手動用QGraphicsView::setSceneRect
來處理我想
QChartView
應該是已經處理這方面的問題了@Flotisable 好的,谢谢,我已经改用QChartView了。