Название: Ошибка вычисления видимой области???
Отправлено: alexman от Август 03, 2010, 00:00
Есть код: #include <QtCore/QDebug> #include <QtGui/QApplication> #include <QtGui/QGraphicsItem> #include <QtGui/QGraphicsScene> #include <QtGui/QGraphicsView>
class GraphicsItem : public QGraphicsItem { public: GraphicsItem() : QGraphicsItem() {}
QRectF boundingRect() const { return QRectF( 0, 0, 100, 100 ); }
void paint( QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget ) { qDebug() << painter->worldTransform().inverted().mapRect( painter->viewport() ); qDebug() << ( (QGraphicsView*)widget->parent() )->mapToScene( painter->viewport() ).boundingRect(); } };
int main( int argc, char** argv ) { QApplication app( argc, argv );
GraphicsItem* item = new GraphicsItem();
QGraphicsScene scene; scene.addItem( item ); scene.setSceneRect( item->boundingRect() );
QGraphicsView view; view.setScene( &scene );
app.setActiveWindow( &view ); view.show(); view.resize( 300, 100 );
view.fitInView( scene.sceneRect() );
return app.exec(); }
Данный код выводит в консоли: QRect(-1,-2 101x104) QRectF(-0.680272,-2.12766 101.361x104.255)
Должно быть QRectF(0,0 100x100). Никак не пойму почему область просмотра больше чем должно быть на самом деле?
Название: Re: Ошибка вычисления видимой области???
Отправлено: alexman от Август 03, 2010, 08:43
Добавил рисовку прямоугольника (см. рис): #include <QtCore/QDebug> #include <QtGui/QApplication> #include <QtGui/QGraphicsItem> #include <QtGui/QGraphicsScene> #include <QtGui/QGraphicsView>
class GraphicsItem : public QGraphicsItem { public: GraphicsItem() : QGraphicsItem() {}
QRectF boundingRect() const { return QRectF( 0, 0, 100, 100 ); }
void paint( QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget ) { painter->drawRect( boundingRect() ); qDebug() << painter->worldTransform().inverted().mapRect( painter->viewport() ); qDebug() << ( (QGraphicsView*)widget->parent() )->mapToScene( painter->viewport() ).boundingRect(); } };
int main( int argc, char** argv ) { QApplication app( argc, argv );
GraphicsItem* item = new GraphicsItem();
QGraphicsScene scene; scene.addItem( item ); scene.setSceneRect( item->boundingRect() );
QGraphicsView view; view.setScene( &scene );
app.setActiveWindow( &view ); view.show(); view.resize( 300, 300 );
view.fitInView( scene.sceneRect() );
return app.exec(); }
Видно, что со всех сторон появляется зазор, который нах не нужен! Или я что-то не понимаю!?
Название: Re: Ошибка вычисления видимой области???
Отправлено: lit-uriy от Август 03, 2010, 10:30
в описании на QRect, написано, что по историческим причинам, он врёт на единицу.
Не знаю какаие могли быть исторические причины. Но мои раскопки в исходниках этого класса показали, что врёт ещё и документация. напутано с методами, которые врут, а которые не врут.
Название: Re: Ошибка вычисления видимой области???
Отправлено: alexman от Август 03, 2010, 11:00
в описании на QRect, написано, что по историческим причинам, он врёт на единицу.
Не знаю какаие могли быть исторические причины. Но мои раскопки в исходниках этого класса показали, что врёт ещё и документация. напутано с методами, которые врут, а которые не врут.
Да тут не на единицу! По высоте получется больше чем на 1! На первый взгляд элементарные вещи! Почему не правят непонятно ???
|