Russian Qt Forum
Октябрь 02, 2024, 13:33 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Неправильная работа QGraphicsView::mapToScene.  (Прочитано 5635 раз)
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), что отличается. Что не так?
Записан
santaclaus
Гость
« Ответ #1 : Февраль 11, 2011, 22:45 »

Код:
        /*
        void resizeEvent( QResizeEvent* event )
        {
                QGraphicsView::fitInView( boundRect() );
                QGraphicsView::resizeEvent( event );
        }
*/

вот это убрал и все хорошо, не?
Записан
alexman
Гость
« Ответ #2 : Февраль 11, 2011, 23:03 »

Не катит! Надо с этим! Иначе при ресайзе во вью не будет по размерам "заливаться" содержимое!
Записан
alexman
Гость
« Ответ #3 : Февраль 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();
}
Но почему...хз! Может кто подскажет почему?
Записан
alexman
Гость
« Ответ #4 : Февраль 14, 2011, 09:20 »

Так что не так делаю? Никто что ли трансформации не делает при работе с QGraphicsView? Часто ведь нужно из оконных координат в координаты сцены...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.129 секунд. Запросов: 21.