Наказание за использование QGraphicsObject против QGraphicsItem?

В настоящее время у меня есть иерархия элементов, основанных на QGraphicsItem.

Вместо этого я хочу перейти к QGraphicsObject, чтобы можно было добавлять свойства к моим элементам. Я не буду использовать сигналы / слоты или любые другие функции QObject.

Мне сказали, что вы не должны наследовать QObject, потому что он "тяжелый" и "медленный".

Чтобы проверить влияние, я извлекаю из QGraphicsObject, добавляю пару свойств к своим элементам и смотрю на использование памяти работающим приложением. Я создаю 1000 предметов, используя оба вкуса, и я не замечаю ничего больше, чем использование памяти на 10 КБ больше.

Поскольку все, что я добавляю к своим предметам, это свойства, можно ли с уверенностью сказать, что QObject только добавляет вес, если вы используете сигналы / слоты?

3 ответа

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

Но если все, что вам нужно, это способ хранения некоторой дополнительной информации, почему бы не создать подкласс QGraphicsItem и добавить один или два метода, которые позволят вам хранить необходимые данные? Поступая так, я думаю, что вы будете лучше сообщать о намерениях своего кода, который кажется более важным, чем все вышеперечисленное.

@Mason Chang: Это имеет смысл, но если испускание сигналов, которые происходят при использовании QGraphicsObject, делает QGraphicsObjects медленнее, чем QGraphicsItems, то вы можете избежать этого, унаследовав от QObject и QGraphicsItem вместо использования QGraphicsObject. Таким образом, вы можете определять сигналы и слоты, но не получаете накладных расходов на автоматически излучаемые сигналы, которые вас не интересуют.

Имеет ли это смысл и обеспечивает хорошее промежуточное положение между QGraphicsObject и QGraphicsItem?

редактировать: сделал новый вопрос для этого, который может быть немного более разъясняющим

Как насчет производительности? В QGraphicsObject есть дополнительные затраты при вызове setX/setY и так далее. Вы можете перейти к QGraphicsItemPrivate::setPosHelper и найти более подробную информацию.

Другие вопросы по тегам