Первое, что я бы сделал 1002 *, это очень внимательно посмотреть на несоответствие во втором параметре вашего совпадения сигнал / слот.
Один - QPolygon&
, а другой - CustomPolygon*
. Я понимаю, что они должны были соответствовать. Даже если один из них является подходящим подклассом другого, я не думаю, что вы можете смешивать ссылки и указатели подобным образом.
И в отношении вашего (слегка перефразированного) комментария:
Мой слот должен оставаться указателем, потому что он указывает на элемент, который удаляется из QGraphicsScene
.
Мой сигнал не может быть указателем, поскольку нет преобразования из QPolygonF
в QPolygonF *
, и мне требуется от QPolygonF
до mapToScene
.
Я думаю Я понимаю, что вы говорите, и есть пара вопросов.
Если ваш слот принимает указатель, который будет освобожден, вы должны дать указатель на него и вернуть sh контроль над объектом позади него (так что начните с динамически выделяемой копии). вы хотите разрешить go из или сделать динамически распределяемой копией из того, что вы не хотите разрешить go из).
И я не уверен, почему вы думаете, что нет преобразования объекта в указатель на этот объект. Я полагаю, это технически верно, поскольку сам класс не обеспечивает преобразование, но это действительно часть языка base :
Type thing;
Type *pointerToThing = &thing;
Обе эти проблемы должны быть решены с помощью чего-то вроде:
QVector<QPointF> points;
QPolygonF thisIsMyPoly = mapToScene(polygon());
QploygonF *thisIsPolyForFreeing = new QPolygonF(thisIsMyPoly);
emit editPolygon(points, thisIsPolyForFreeing);
Ваш сигнал все равно придется изменить, чтобы использовать указатель, а не ссылку, и, надеюсь, это уменьшит несоответствие.
Если указатель является фактическим указателем на QPolygonF
, который не может быть скопирован (потому что это указатель на фактический элемент, содержащийся в QGraphicsScene
, и поэтому вам нужен оригинальный указатель для его удаления), я думаю, вы должны просто иметь возможность передавать этот указатель как есть, предполагая, что mapToScene()
возвращает ссылку на него, а не копию:
QPolygonF poly = mapToScene(polygon()); // get ref.
emit editPolygon(points, &poly); // pass ref's address.