Наказание за использование 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 и найти более подробную информацию.