Нарисуйте границу QGraphicsItem - PullRequest
2 голосов
/ 09 июля 2011

Как нарисовать границу QGraphicsItem?Простой painter->drawRect( boundingRect() ) в методе перегруженной краски неверен (правый нижний угол находится вне элемента).

Ответы [ 4 ]

4 голосов
/ 09 июля 2011

Система координат для графики и рисования фигур может быть сложной для получения прямой.Вы часто будете программировать тестовые рисунки, чтобы понять это правильно, но это именно то, что вы говорите, чтобы рисовать.Вам необходимо понять систему координат .На этой странице обратите особое внимание на рисунок "Одноручное перо" для QRectF.

3 голосов
/ 09 июля 2011

Обратите внимание, что документы для QPainter :: drawRect () содержат фактическую ширину:

заполненный прямоугольник имеет размер rectangle.size (). Штриховой прямоугольник имеет размер rectangle.size () плюс ширину пера.

Учитывая это, я думаю, вы захотите что-то немного более сложное, чем просто использование ограничивающего прямоугольника:

QRect r = boundingRect();
QPen p = painter->pen();
painter->drawRect(QRect(r.x(), r.y(), r.width()-p.width(), r.height()-p.width()));
2 голосов
/ 09 июля 2011

QGraphicsEffect может быть вашим другом здесь. Вы можете создать его подкласс, чтобы нарисовать границу вокруг произвольного QGraphicsItem. Просто не забудьте переопределить boundingRectFor(), чтобы включить дополнительную границу.

0 голосов
/ 10 июля 2011

Я выяснил свою проблему. Спасибо за все советы, но теперь я вижу, что моя проблема была в другом месте.

Я могу нарисовать QRectF(), который подходит для boundingRect моего элемента, но ... когда я масштабирую свой QGraphicsView (независимо от того, использую ли я метод fitInView() или мою собственную реализацию), возникают некоторые ошибки в отображении моей границы.

Редко одна или две прямые линии жестче, чем другие. Я думаю, что это может быть связано с моими QGraphicsItem с, которые также QGraphicsSvgItem с одновременно.

...