qt怎么获取https的json?qt有什么优点?

阳光 2021-01-28 21:22:45 java常见问答 3144

Qt不只是界面库,Qt提供了功能丰富的C++类库,比如网络编程等,最近有新手java人员想知道qt怎么获取https的json?那么下面我们就来给大家分享一些这方面的知识。

实用QT5访问HTTP/以及HTTPS协议访问并且调用Json解析:

#include "mywidget.h"
#include "ui_mywidget.h"
#include
#include
#include
#include
#include
#include
#include
#include
MyWidget::MyWidget(QWidget * parent):
    QWidget(parent)
    , ui(new Ui::MyWidget)
    {
        ui - > setupUi(this);
        QUrl url;
        m_AccessManager = new QNetworkAccessManager(this);
        url.setUrl("http://ip.taobao.com/service/getIpInfo2.php");
        QSslConfiguration config;
        config.setPeerVerifyMode(QSslSocket::VerifyNone);
        config.setProtocol(QSsl::TlsV1SslV3);
        m_Request.setSslConfiguration(config);
        m_Request.setUrl(url);
        QByteArray sendData;
        sendData = QString::fromStdString("ip=27.106.204.0")
            .toLocal8Bit();
        m_Request.setRawHeader("Accept", "*/*");
        m_Request.setRawHeader("Accept-Language", "zh-CN,zh;q=0.9");
        m_Request.setRawHeader("Content-Type", "application/x-www-form-urlencoded");
        m_Request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36");
        m_Request.setRawHeader("X-Requested-With:", "XMLHttpRequest");
        m_Request.setRawHeader("Referer", "http://ip.taobao.com/ipSearch.html");
        m_Reply = m_AccessManager - > post(m_Request, sendData);
        connect(m_AccessManager, & QNetworkAccessManager::finished, this, & MyWidget::ReplyReadFunc);
    }
MyWidget::~MyWidget()
{
    delete ui;
}
void MyWidget::ReplyReadFunc(QNetworkReply * Reply)
{
    int NetworkErrors = -1;
    NetworkErrors = Reply - > error();
    QString ip;
    QString country;
    QString region;
    QString isp;
    if (NetworkErrors == QNetworkReply::NoError)
    {
        QByteArray databuff = Reply - > readAll();
        QString result = QString::fromStdString(databuff.toStdString())
            .toUtf8();
        QJsonDocument document;
        QJsonParseError ParseError;
        document = QJsonDocument::fromJson(result.toUtf8(), & ParseError);
        if (!document.isNull() && ParseError.error == QJsonParseError::NoError)
        {
            if (document.isObject())
            {
                QJsonObject Object = document.object(); //获取文档对象
                if (!Object.isEmpty())
                {
                    if (Object.contains("data")) //先判断有没有
                    {
                        QJsonValue dataObj = Object.value("data");
                        if (dataObj.isObject()) //判断是否是对象
                        {
                            QJsonObject ObjectData = dataObj.toObject();
                            if (ObjectData.contains("ip"))
                            {
                                QJsonValue ipVal = ObjectData.value("ip");
                                if (ipVal.isString())
                                {
                                    ip = ipVal.toString();
                                }
                            }
                            if (ObjectData.contains("region"))
                            {
                                QJsonValue regionVal = ObjectData.value("region");
                                if (regionVal.isString())
                                {
                                    region = regionVal.toString();
                                }
                            }
                            if (ObjectData.contains("isp"))
                            {
                                QJsonValue ispVal = ObjectData.value("isp");
                                if (ispVal.isString())
                                {
                                    isp = ispVal.toString();
                                }
                            }
                        }
                    }
                }
            }
            country += "您的ip:" + ip;
            country += "所在城市:" + region;
            country += "运营商:" + isp;
            qDebug() << country.tostdstring()
                .c_str(); < p = "" >
        }
    }
}

qt有什么优点?

1、优良的跨平台特性。

Qt支持下列操作系统:Microsoft Windows 95/98、Microsoft Windows NT、Linux、Solaris、SunOS、HP-UX、Digital UNIX (OSF/1、Tru64)、Irix、FreeBSD、BSD/OS、SCO、AIX、OS390和QNX等。

2、面向对象。

Qt的良好封装机制使得Qt的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。Qt提供了一种称为signals/slots 的安全类型来替代callback,这使得各个元件之间的协同工作变得十分简单。

3、丰富的API。

Qt包括多达250个以上的C++类,还提供基于模板的collections、serialization、file、I/O device、directory management和date/time类。甚至还包括正则表达式的处理功能。

4、支持2D/3D图形渲染,支持OpenGL。

5、大量的开发文档。

6、XML支持。但是真正使得Qt在自由软件界的众多Widgets(如Lesstif、Gtk、EZWGL、Xforms及fltk等)中脱颖而出的还是基于Qt的重量级软件KDE。Qt虽然是商业公司的产品,但是走的却是开源路线,提供免费下载,全部都是开放源代码,非商业用途亦采用GPL的版权宣告,著名的Open Source"KDE"项目便是采用Qt开发的。

Qt作为跨平台的C++图形用户界面应用程序框架。它为应用程序开发者提供建立艺术级图形界面所需的所有功能。在获取https的json时候,大家参考以上的做法就可以了,最后大家如果想要了解更多json相关知识,敬请关注奇Q工具网。

推荐阅读:

java有哪些新建对象的方法?java新建对象的正确姿势

eclipse怎么设置中文?eclipse有哪些插件?

geojson格式如何打开?打不开的原因有哪些?