нет соответствующей функции для вызова при переносе проекта из qt4 в qt5

Я перенес проект из Qt4 в Qt5, фактически я закончил его миграцию, но теперь мне нужно перенести библиотеки, и я столкнулся с проблемой, которую не могу решить:

..\qenc\ShapeLandPOI.cpp: In member function 'virtual void ShapeLandPOI::draw(QPainter*)':
..\qenc\ShapeLandPOI.cpp:74:92: error: no matching function for call to 'QMap<QString, ShapeAttribute>::iterator::iterator(QMap<QString, ShapeAttribute>::const_iterator)'
AttributeSet::iterator vItPOI = (AttributeSet::iterator)attributes.at(i).find("POI");
note: candidates are:QMap<Key, T>::iterator::iterator(QMap<Key, T>::Node*) [with Key = QString; T = ShapeAttribute; QMap<Key, T>::Node = QMapNode<QString, ShapeAttribute>]
inline iterator(Node *node) : i(node) { }
^

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

..\..\..\..\..\Qt5\5.2.1\mingw48_32\include\QtCore/qmap.h:423:16: note:   no known conversion for argument 1 from 'QMap<QString, ShapeAttribute>::const_iterator' to 'QMap<QString, ShapeAttribute>::Node* {aka QMapNode<QString, ShapeAttribute>*}'
..\..\..\..\..\Qt5\5.2.1\mingw48_32\include\QtCore/qmap.h:422:16: note: QMap<Key, T>::iterator::iterator() [with Key = QString; T = ShapeAttribute]
inline iterator() : i(0) { }
^

эти две строки дают проблемы:

AttributeSet::iterator vItPOI = (AttributeSet::iterator)attributes.at(i).find("POI");
AttributeSet::iterator vItPOI0 = (AttributeSet::iterator)attributes.at(i).find("POI0");

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

РЕДАКТИРОВАТЬ: я попытался использовать static_cast вместо этого, но это все та же ошибка.

1

Решение

Я решил это поворотом

AttributeSet::iterator vItPOI = (AttributeSet::iterator)attributes.at(i).find("POI");

в

ShapeAttribute vItPOI = attributes.at(i).find("POI").value();

и изменение очень маленькой части кода, например, у меня было

if (vItPOI  == attributes.at(i).end()) continue;

и изменил его на

    if (attributes.at(i).find("POI") == attributes.at(i).end()) continue;

Таким образом, функциональность должна оставаться прежней. Мне повезло, потому что переменная использовалась только для получения строкового значения атрибута shape, за исключением нескольких случаев, когда мне не нужно было много менять.

0

Другие решения