"error: ‘sender’ was not declared in this scope" avec QNetworkReply
-
Non, cela sort une nouvelle erreur :
error: Class contains Q_OBJECT macro but does not inherit from QObject
-
Salut,
La classe doit hériter de QObject et posséder la macro Q_OBJECT. Voir ici pour un exemple.
Le code ci-dessus devrait se présenter de la manière suivante :
class ConnectionToServer : public QObject { O_OBJECT public : void connection (QPushButton *Button, QString Name, QString Passcode) { Button->setEnabled(false); QFile UrlFile(":/texts/connection-url.txt"); if(!UrlFile.open(QIODevice::ReadOnly)) { } QTextStream UrlTextStream(&UrlFile); QString UrlString; UrlFile.close(); const QUrl MainServerUrl = QUrl(UrlString); QNetworkRequest MainServerQuery(MainServerUrl); MainServerQuery.setPriority(QNetworkRequest::HighPriority); QNetworkAccessManager *m = new QNetworkAccessManager(); QNetworkReply *r = m->get(MainServerQuery); QAbstractButton::connect(r, SIGNAL(finished()), nullptr, SLOT(LoginFinished(Button))); } private: void LoginFinished(QPushButton *Button) { QNetworkReply *r = qobject_cast<QNetworkReply*>(sender()); } }; }
Cordialement,
Axel -
Ah, d'accord, merci !
-
Je n'ai pas regardé le code en détail. J'espère qu'il est clair qu'il présente des problèmes plus ou moins importants :
- Name et Passcode devraient être passés comme const & pour éviter les copies inutiles.
- UrlString n'est jamais assigné, donc l'url ne sera jamais ouvert correctement.
- QNetworkAccessManager *m est alloué mais pas supprimé => Memory leak !
-
Pour le dernier point, comment on règle le problème ?
-
Il faut l'effacer une fois qu'il n'est plus utilisé.
-
En utilisant
delete
.Ceci dit, l'architecture de ConnectionToServer n'est pas la meilleure. Y a-t-il d'autres objets dans l'application qui utilise QNetworkAccessManager ?
-
@Futuray-Programming said in "error: ‘sender’ was not declared in this scope" avec QNetworkReply:
Oui, certes, mais comment ?
Il y a beaucoup de documentation autour de QNetworkAccessManager.
Vous pouvez y jeter un coup d'œil et travailler avec les extraits de code.