【问题标题】:QNetworkaccessmanager object connect function dose not calling [closed]QNetworkaccessmanager对象连接函数不调用[关闭]
【发布时间】:2018-11-15 07:40:06
【问题描述】:

在我的项目中,我想从服务器下载文件。我正在尝试使用 Qnetwrokaccessmanager 下载文件。在我的代码中,我使用了一个连接函数,比如

connect(manger_, SIGNAL(finished(QNetworkReply *)), this, SLOT(replyFinshed(QNetworkReply*)))

在项目执行时没有调用函数replayFinshed()

manger_= new QNetworkAccessManager(this);
connect(manger_, SIGNAL(&QNetworkAccessManager::finished), this, SLOT(replyFinshed(QNetworkReply*)));
connect(manger_, SIGNAL(QNetworkReply::error()), SLOT(errmsg(QNetworkReply *)));
QUrl url(str);
QNetworkRequest request;
request.setUrl(url);
rsult = manger_->get(request);



void Cricbang::replyFinished(QNetworkReply* reply){
    QMessageBox::information(this, "replay", "finished");
    if (reply->error())
    {
        qDebug() << "ERROR!";
        qDebug() << reply->errorString();
    }
    else
    {
        QFile *file = new QFile("saved/team.json");
        if (file->open(QFile::Append))
        {
            file->write(reply->readAll());
            file->flush();
            file->close();
        }
        delete file;
    }

    reply->deleteLater();
  }  

【问题讨论】:

  • 错字:将connect(manger_, SIGNAL(&amp;QNetworkAccessManager::finished), this, SLOT(replyFinshed(QNetworkReply*))); 更改为connect(manger_, &amp;QNetworkAccessManager::finished, this, &amp;Cricbang::replyFinished);。不要将旧的连接方式(SIGNAL 和 SLOT)与新的语法结合起来。

标签: c++ qt qt5 qnetworkaccessmanager


【解决方案1】:

尝试改变

connect(manger_, SIGNAL(&QNetworkAccessManager::finished), this, SLOT(replyFinshed(QNetworkReply*)));

connect(manger_, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinshed(QNetworkReply*)));

或使用 Qt5 中引入的新语法,如 eyllanesc 建议

connect(manger_, &QNetworkAccessManager::finished, this, &Cricbang::replyFinshed);

https://wiki.qt.io/New_Signal_Slot_Syntax查看更多信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-06
    • 1970-01-01
    • 2021-08-07
    相关资源
    最近更新 更多