Я хотел бы нарисовать точку или точку или точку GraphicsView, что:Как создать точку произвольного размера в QGraphicsView Qt?
имеет произвольный размер, который работает как радиус окружности,
зависит от масштабных преобразований в том, что его положение изменяется в соответствии с текущей шкалой,
, но его произвольный размер НЕ зависит от масштабирования.
Проблема, которую я специально решаю, изображает небесные тела в визуализаторе солнечной системы. Я хочу делать вещи с надлежащим расстоянием друг от друга, но пространство невообразимо пустым - попытка изобразить объект размером с Землю с правильным радиусом сделает очень трудным для зрителя фактически увидеть что-либо, если пользователь уменьшит его до см. другие планеты. Поэтому я хотел бы отметить местоположения точками, которые не масштабируются в диаметре, а все остальное (например, орбитальные пути, расстояния) масштабируется.
Я попытался использовать ItemIgnoresTranformations, но это заставляет объект игнорировать изменения размера и изменения местоположения при изменении масштаба. Я хочу, чтобы объект был заметен независимо от масштаба, но в то же время для того, чтобы он был на своем месте.
Альтернативные решения приветствуются.
EDIT1:
Новый код выглядит так:
ellipse2 = scene->addEllipse(0, 0, body.radius,body.radius,blackPen,greenBrush);
ellipse2->setFlag(QGraphicsItem::ItemIgnoresTransformations);
ellipse2->setPos(system.starX+body.getX(date2days(game.date))-body.radius/2.0,
system.starY+body.getY(date2days(game.date))-body.radius/2.0);
Раньше позиция была просто положить в место на 0s в вызове addElipse(). Однако есть проблема - движения планет не совсем соответствуют построенным траекториям орбиты (в настоящее время я упрощаю идеальные круги с постоянной угловой скоростью, а не эллиптические пути с переменной угловой скоростью). Фактические пути, по-видимому, сдвинуты на неизвестную (но зависящую от масштаба) величину в направлении вверху слева.
Вот как это выглядит unzoomed:
А вот как это выглядит увеличенной:
Эта проблема не возникает, если элемент зависит от преобразований. Что дает?
'QGraphicsItem :: ItemIgnoresTransformations' должен делать именно то, что вы хотите. Проблема может заключаться в том, как вы добавляете свои элементы в сцену. См. [This] (http://stackoverflow.com/questions/20125130/fixed-size-qgraphicsitems-in-multiple-views) вопрос. – thuga
Спасибо! Это помогло, но результат все еще не совсем корректен. Я редактировал с объяснением. Мне кажется, что проблема может быть в body.radius - но как определить текущий масштаб для его масштабирования? –
Нашли ошибку и разместите решение. –