Следующий код показывает окно слева (см. Изображение ниже).Тем не менее, раскомментируя строку, отмеченную /*[identity transform]*/
, генерируется окно справа.Как сообщает qInfo () в выводе консоли, похоже, что ничего существенного для преобразования координат не меняется.
Может кто-нибудь объяснить мне причину?Я не могу найти его в документации .
class SomeItem : public QGraphicsEllipseItem
{
public:
explicit SomeItem(const QRectF& rect, QGraphicsItem* parent = nullptr) :
QGraphicsEllipseItem(rect,parent){}
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
QWidget *widget)
{
QTransform tr;
//painter->setWorldTransform(tr); /*[identity transform]*/
qInfo() << painter->window().left() << painter->window().right()
<< painter->window().top() << painter->window().bottom();
qInfo() << painter->viewport().left() << painter->viewport().right()
<< painter->viewport().top() << painter->viewport().bottom();
qInfo() << painter->matrix().m11() << painter->matrix().m12()
<< painter->matrix().m21() << painter->matrix().m22();
/* <--->*/
QGraphicsEllipseItem::paint(painter,option,widget);
}
};
int main(int argc, char **argv)
{
QApplication app (argc, argv);
QGraphicsScene ms;
ms.setSceneRect(-20,-20,40,40);
SomeItem* si = new SomeItem(QRectF(-10,-10,20,20));
ms.addItem(si);
QGraphicsView view(&ms);
view.show();
return app.exec();
}
Вывод на консоль (для обоих случаев):
0 197 0 97
0 197 0 97
1 0 0 1