Доброго времени суток. Появилась такая заморочка. Нужно удалить испускателя сигнала из подключенного к нему слота. Теперь подробнее: Есть метод класса наследника QObject:
void MyAPI::updateHistory(QString param){
QNetworkAccessManager *api = new QNetworkAccessManager(this);
connect(api, SIGNAL(finished(QNetworkReply*)), this, SLOT(historyFinished(QNetworkReply*)));
api->get(QNetworkRequest(QUrl("https://server.com/public?command=returnHistory¶m="+param)));
}
void MyAPI::historyFinished(QNetworkReply *reply){
if (reply->error() == QNetworkReply::NoError){
emit updatedHistory(QJsonDocument::fromJson(reply->readAll()));
} else {
qDebug() << reply->errorString();
emit historyNotUpdated(reply->errorString());
}
qobject_cast<QNetworkAccessManager *>(sender())->deleteLater(); //Правильно ли так делать?
reply->deleteLater(); //Правильно ли так делать?
}
Ну да ладно. Это пол беды. Такая схема у меня работала до тех пор, пока я не решил вынести реализацию в плагины. Тут тоже схема работает, но иногда при закрытии приложения, в дебаг начинают сыпаться сотни сообщений вида: QSocketNotifier: socket notifiers cannot be disabled from another thread. И приложение зависает намертво. Никак не могу понять с чем это может быть связано, но подозреваю что ноги тут растут из одного и того же места. Хотя тут у меня подозрение еще на один мой костыль. А именно - в схеме реализации плагинов, предложенном Qt, нет возможности использовать сигналы и слоты. Но задействовав костыль вида:
connect(dynamic_cast<QObject *>(api_interface), SIGNAL(updatedHistory(QJsonDocument)), this, SLOT(history(QJsonDocument)));
Так собственно о чем это я? Не подскажете в чем мой косяк? И почему данные ошибки проявляются не всегда?