Название: Неправильная работа QGraphicsView::mapToScene.
Отправлено: alexman от Февраль 11, 2011, 15:50
Вот код: #include <QtCore/QDebug> #include <QtGui/QApplication> #include <QtGui/QGraphicsView> #include <QtGui/QGraphicsScene>
class GraphicsView : public QGraphicsView { public: GraphicsView() : QGraphicsView() { startTimer( 3000 ); }
QRectF boundRect() const { return QRectF( 0.0, 0.0, 5000.0, 10000.0 ); }
private: void resizeEvent( QResizeEvent* event ) { QGraphicsView::fitInView( boundRect() ); QGraphicsView::resizeEvent( event ); }
void timerEvent ( QTimerEvent* event ) { killTimer( event->timerId() ); qDebug() << mapToScene( viewport()->rect() ).boundingRect(); } };
int main( int argc, char** argv ) { QApplication app( argc, argv );
QGraphicsScene scene;
GraphicsView* view = new GraphicsView(); view->setScene( &scene );
scene.setSceneRect( view->boundRect() ); view->fitInView( view->boundRect() );
app.setActiveWindow( view ); view->show();
return app.exec(); }
Устанавливаю scene rect и view rect равные QRectF( 0.0, 0.0, 5000.0, 10000.0 ). Далее проверяю работу функции mapToScene с параметром viewport()->rect(). По идее результат должен быть равен QRectF( 0.0, 0.0, 5000.0, 10000.0 ), но на практике получаем QRectF(-15.873,-42.5532 5031.75x10085.1), что отличается. Что не так?
Название: Re: Неправильная работа QGraphicsView::mapToScene.
Отправлено: santaclaus от Февраль 11, 2011, 22:45
/* void resizeEvent( QResizeEvent* event ) { QGraphicsView::fitInView( boundRect() ); QGraphicsView::resizeEvent( event ); } */
вот это убрал и все хорошо, не?
Название: Re: Неправильная работа QGraphicsView::mapToScene.
Отправлено: alexman от Февраль 11, 2011, 23:03
Не катит! Надо с этим! Иначе при ресайзе во вью не будет по размерам "заливаться" содержимое!
Название: Re: Неправильная работа QGraphicsView::mapToScene.
Отправлено: alexman от Февраль 11, 2011, 23:10
В общем так работает: #include <QtCore/QDebug> #include <QtGui/QApplication> #include <QtGui/QGraphicsView> #include <QtGui/QGraphicsScene>
class GraphicsView : public QGraphicsView { public: GraphicsView() : QGraphicsView() { startTimer( 3000 ); }
QRectF boundRect() const { return QRectF( 0.0, 0.0, 5000.0, 10000.0 ); }
private: void resizeEvent( QResizeEvent* event ) { QGraphicsView::fitInView( boundRect() ); QGraphicsView::resizeEvent( event ); }
void timerEvent ( QTimerEvent* event ) { killTimer( event->timerId() );
const int lineWidth = 2 * this->lineWidth(); QRect rect = viewport()->rect(); rect.setLeft( rect.left() + lineWidth ); rect.setRight( rect.right() - lineWidth ); rect.setTop( rect.top() + lineWidth ); rect.setBottom( rect.bottom() - lineWidth );
qDebug() << mapToScene( rect ).boundingRect(); } };
int main( int argc, char** argv ) { QApplication app( argc, argv );
QGraphicsScene scene;
GraphicsView* view = new GraphicsView(); view->setScene( &scene );
scene.setSceneRect( view->boundRect() ); view->fitInView( view->boundRect() );
app.setActiveWindow( view ); view->show();
return app.exec(); }
Но почему...хз! Может кто подскажет почему?
Название: Re: Неправильная работа QGraphicsView::mapToScene.
Отправлено: alexman от Февраль 14, 2011, 09:20
Так что не так делаю? Никто что ли трансформации не делает при работе с QGraphicsView? Часто ведь нужно из оконных координат в координаты сцены...
|