Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: marbius от Ноябрь 13, 2010, 16:52



Название: QGraphicsItem и физические размеры (дюймы, миллиметры)
Отправлено: marbius от Ноябрь 13, 2010, 16:52
Доброго времени суток.

Как можно сделать, чтобы для наследника от QGraphicsItem можно было задавать габариты в физических величинах, миллиметрах, дюймах и пр.?

Немного запутался: собственно физические размеры можно получить, используя QPaintDevice::logicalDpiX() и ::logicalDpiY(), но как тогда в конструкторе "получить" QPaintDevice? Как бы, можно сделать расчеты и в QGraphicsItem::paint(...), но тогда "пролетает" QGraphicsItem::boundingRect().

Благодарен.


Название: Re: QGraphicsItem и физические размеры (дюймы, миллиметры)
Отправлено: marbius от Ноябрь 13, 2010, 17:50
Если кому интересно, реализовал так:

Код
C++ (Qt)
MyItem::MyItem(QGraphicsItem *parent) :
   QGraphicsItem(parent)
{
   dpiX=0;
   dpiY=0;
   width=100;
   height=100;
}
 
QRectF MyItem::boundingRect() const
{
   return QRectF (0,0,width+2,height+2);
}
 
void MyItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{   QPaintDevice *device=painter->paintEngine()->paintDevice();
   int dX=device->logicalDpiX();
   int dY=device->logicalDpiY();
   if ((dpiX!=dX)||(dpiY!=dY))
   {
       dpiX=dX;
       dpiY=dY;
       width=int(sizeX*dX/25.4);               // sizeX и sizeY - размеры в миллиметрах
       height=int(sizeY*dY/25.4);
       this->prepareGeometryChange();      // невнимательно читал Assistant, упустил из виду, потому утверждения про "пролетающий" boundingRect не верны
   }
   painter->drawRect(0,0,width,height);
}
 

Код работает как задумывалось: появилась возможность задавать размеры в миллиметрах. Прошу меня поправить, если такой подход не верен.
Спасибо.


Название: Re: QGraphicsItem и физические размеры (дюймы, миллиметры)
Отправлено: pethead от Ноябрь 13, 2010, 18:12
прям в мм? а если 2 монитора с одинаковым разрешением но разной диагональю, т.е. физическая точка разная, этот движок что отрисует все равно одинаковые квадратики?


Название: Re: QGraphicsItem и физические размеры (дюймы, миллиметры)
Отправлено: marbius от Ноябрь 13, 2010, 18:37
прям в мм? а если 2 монитора с одинаковым разрешением но разной диагональю, т.е. физическая точка разная, этот движок что отрисует все равно одинаковые квадратики?
Вряд ли, ибо Вы самостоятельно ответили на свой вопрос, что физическая  точка разная, но думаю, что артефакты будут наблюдаться только при одновременном отображении на 2х мониторах, при переносе на один из них, думаю, будет все норм...
К сожалению, отработать такую ситуацию не на чем.

А "этот движок" - это Вы про что?


Название: Re: QGraphicsItem и физические размеры (дюймы, миллиметры)
Отправлено: pethead от Ноябрь 13, 2010, 20:34
p a i n t E n g i n e