Делаю следующим образом:
void VksWidget::setAvatarsPixmap()
{
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
for (int i = 0; i < mListContacts.count(); i++)
{
if ( !mListContacts[i].avatarUrl.isEmpty() )
{
qDebug() << "id: " << mListContacts[i].id;
qDebug() << "url: " << mListContacts[i].avatarUrl;
QNetworkRequest request(QUrl(mListContacts[i].avatarUrl));
QSslConfiguration conf = request.sslConfiguration();
conf.setPeerVerifyMode(QSslSocket::VerifyNone);
request.setSslConfiguration(conf);
auto lambdaSetAvatar = [&, i](QNetworkReply* reply) {
QPixmap avatar;
avatar.loadFromData( reply->readAll() );
contactListWidget->getContact(mListContacts[i].id)->setAvatar(avatar);
};
connect(manager, &QNetworkAccessManager::finished, this, lambdaSetAvatar, Qt::DirectConnection);
connect(manager, &QNetworkAccessManager::finished, manager, &QNetworkAccessManager::deleteLater);
manager->get(request);
}
}
}
Но тогда индекс i успевает обновитья прежде чем, сработает слот. Как это правильно делается?
а где код с обновлением индекса? как-то не понятно, что ты имеешь ввиду
наверное в классе Contact иметь метод получения аватарки из сети когда потребуется.
теперь понял, кажется... тебе стоит затормозить цикл, пока NaM не финиширует, флаг сделай, семафор, что угодно. Членом класса сделай, а в цикле while (m_flag == false) {} перед запросом сделай m_flag = false ну и в конце своей лябды m_flag=true
Обсуждают сегодня