我编写了一个使用qhttp来获取网页的程序。这在Linux上工作正常,但在我的Windows盒子(Vista)上不工作。似乎从未收到qhttp完成信号。
相关代码为:
Window::Window()
{
http = new QHttp(this);
connect(http, SIGNAL(done(bool)), this, SLOT(httpDone(bool)));
url = new QUrl("http://something.com/status.xml");
http->setHost(url->host(), url->port() != -1 ? url->port() : 80);
if (!url->userName().isEmpty()) http->setUser(url->userName(), url->password());
}
void Window::retrievePage()
{
byteArray = new QByteArray;
result = new QBuffer(byteArray);
result->open(QIODevice::WriteOnly);
httpRequestAborted = false;
httpGetId = http->get(url->path(), result);
}
void Window::httpDone(bool error)
{
//Never gets here!
}
任何帮助将不胜感激。
马特
最佳答案
这根本不应该发生,即QHttp在Windows和Unix上都能可靠地工作。
我的建议是检查发球是否给出正确的反应。这可以例如完成通过验证数据传输是否正常。您可以从QHttp的信号中跟踪状态,例如dataReadProgress,requestStarted,requestFinished和其他相关信号。
另一方面,为什么不使用推荐的QNetworkAccessManager而不是使用旧的QHttp?为了让您的脚快点湿,请检查我前一段时间发布到Qt Labs的示例:image viewer with remote URL drag-and-drop support。它使用所说的QNetworkAccessManager从被删除的URL中获取图像。检查source-code,它只有150行。