关于Qt,请问怎么用Qhttp访问这个网址http://192.168.1.1:8080/?action=stream 。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Qt,请问怎么用Qhttp访问这个网址http://192.168.1.1:8080/?action=stream 。相关的知识,希望对你有一定的参考价值。

毕设做视频采集,在一个论坛看了这个方法。东西买回来之后发现第一步都不会。问了几天没人回复。有个好心人说用QWebView,但是这样是直接将网页显示出来,我想做图像处理。需要视频数据才行。

参考技术A 帮顶一个二级域名 参考技术B 兄弟 解决了吗 求助啊 参考技术C 我不知道。。可以去百度看一下。。。。。

QHttp 在 Qt5 中不可用

【中文标题】QHttp 在 Qt5 中不可用【英文标题】:QHttp in not available in Qt5 【发布时间】:2014-10-03 13:54:46 【问题描述】:

我注意到 QHttp 类在 Qt5 中不再可用,并且我不断收到一条错误消息,提示我需要使用 QNetworkAccessManager 来执行此操作。

有没有办法在 Qt5 中访问这个类?

【问题讨论】:

是的,您需要使用 QNetworkAccessManager(首选)或使用兼容性插件 QtHttp,它提供 Qt4 中的 QHttp 类。 谢谢,但我不明白“怎么做”。我只是一个学习者。 这取决于你想做什么。您需要尝试编写一些代码,然后提交代码才能在此处获得帮助。 好的,但如果我想使用兼容性插件 QtHttp,它提供 QHttp 类,就像它在 Qt4 中一样。它是像一个包含的头文件还是添加到 user.pro 文件中。 检查this 主题。它解释了如何安装兼容性插件。 【参考方案1】:

在 Qt 5 中使用QNetworkAccessManager。您可以使用事件循环等待回复完成,然后读取可用字节:

QString My_class::My_Method()


   QNetworkAccessManager manager;

   QNetworkReply *reply = manager.get(QNetworkRequest(QUrl(myURL)));

   QEventLoop loop;
   connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
   connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), &loop, SLOT(quit()));
   loop.exec();

   QByteArray bts = reply->readAll();
   QString str(bts);

   delete reply;

   return str;


您也可以通过将QNetworkAccessManagerfinished 信号连接到插槽来以异步方式执行此操作:

connect(&manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(onFinished(QNetworkReply*)));

并在那里读取数据:

void onFinished(QNetworkReply* reply)


   if (reply->error() == QNetworkReply::NoError)
   
       QByteArray bts = reply->readAll();

       ...
   

【讨论】:

【参考方案2】:

这是一个简单的 HTTP 帖子(我使用的是 Qt 5.3.2)

int Connection::postRequest(QString requestType, QUrl params)
    QString params_array = params.query();

    QNetworkRequest request(user->url);
    request.setHeader(QNetworkRequest::ContentLengthHeader, QByteArray::number(params_array.size()));
    request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");

    QEventLoop waitLoop;
    QNetworkAccessManager* connection = new QNetworkAccessManager(/*`this` can also be passed*/);
    QNetworkReply* reply = connection->post(request, params_array.toUtf8());
    QObject::connect(reply, SIGNAL(finished()), &waitLoop, SLOT(quit()));
    waitLoop.exec();

    int errorCode = reply->error();
    if (errorCode != 0)
        // Show Error Message
    
    else
        // Parse "reply"
    

    delete reply;
    delete connection;
    return errorCode;

【讨论】:

你也可以发布你的等待循环吗?【参考方案3】:

假设您不需要维护庞大的代码库,正确的方法是改用新的QNetworkAccessManager 类。

【讨论】:

以上是关于关于Qt,请问怎么用Qhttp访问这个网址http://192.168.1.1:8080/?action=stream 。的主要内容,如果未能解决你的问题,请参考以下文章

在 Qt 5.2 中替代 QHttp

Qt5 http协议 获取网页数据

QHttp 示例 qt 4.4.3 的问题

请问在中国怎么用美国人用的goole搜索引擎?

请问一下网页出现 URL禁止 对不起,你不是授权访问网址这是啥问题?

我的ie的默认网址本来是百度,可被http://www.jsing.net/index1.htm这个网址更改了,请问我如何更改回来?