美文网首页程序员
【9】QT网络编程

【9】QT网络编程

作者: 业余玩家 | 来源:发表于2017-04-26 21:45 被阅读63次

在QT的网路模块中提供了网络编程的相关接口来实现http的访问,其中包含了一些低级的类:QTcpSocket、QTcpServer和QUdpSocket,和一些高级的类:QNetworkRequest、QNetworkReply和QNetworkAccessManager,我们现在主要使用这些高级的类来实现网页的获取。

实现简单网页获取

我们可以创建一个控制台程序来获取一些数据。主要是在这个文件中加入network,就可以进行网络编程了。

#qtspider.pro
QT += core network

QT -= gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++11

TARGET = qtspider
CONFIG += console
CONFIG -= app_bundle

TEMPLATE = app

SOURCES += main.cpp

HEADERS +=
//main.cpp
#include <QApplication>
#include <QtNetwork>
#include <QDebug>
#include <QString>
#include <QWidget>

#include <stdio.h>

class qtspider:public QWidget
{
    Q_OBJECT

public:
    explicit qtspider(QWidget *parent = 0);

private slots:
    void replyfinish(QNetworkReply *);

private:
    QNetworkAccessManager *manager;
    QString *content;
};


qtspider::qtspider(QWidget *parent)
{
    content = new QString();
    manager=new QNetworkAccessManager(this);
    connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(replyfinish(QNetworkReply *)));
    manager->get(QNetworkRequest(QUrl("http://www.jianshu.com/c/RfYyQj")));
}

//这里使用正则表达式来从获取网页中得到我们需要的数据,这里写的比较简单。
void qtspider::replyfinish(QNetworkReply *reply)
{
    QString result=reply->readAll();

    QRegExp exp("<a class=\"title\" target=\"_blank\" href=\"(.*)\">(.*)</a>");
    exp.setMinimal(true);
    int pos=0;
    while((pos=exp.indexIn(result,pos))!=-1){
        qDebug()<<pos;
        qDebug() << exp.cap(1);
        qDebug()<<exp.cap(2);
        pos += exp.matchedLength();
    }
    reply->deleteLater();
}


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    qtspider *spider=new qtspider();

    return a.exec();
}
#include "main.moc"

最后这一段简单的代码获取的是简书散文主题当前页文章的标题,至于如何得到更多信息,还得研究一下,结果是这样的:

2017-04-26_212823.png

错误:undefined reference to "vtable for xxx"
解决:在main.cpp的末尾加上

#include "main.moc"

关于这个错误的详细分析请参考以下这篇文章:
http://blog.csdn.net/baymoon/article/details/1409167

另外,关于正则表达式,这里分享给大家一个关于正则表达式测试的工具:
http://regexpal.isbadguy.com/

相关文章

  • 【9】QT网络编程

    在QT的网路模块中提供了网络编程的相关接口来实现http的访问,其中包含了一些低级的类:QTcpSocket、QT...

  • Qt网络编程

    概述 Qt网络模块为我们提供了编写TCP / IP客户端和服务器的类。 它提供了较低级别的类,例如代表低级网络概念...

  • QT网口编程

    QT网络编程[https://blog.csdn.net/weixin_46571142/article/deta...

  • QT-参考书

    《Qt Creator快速入门》《Qt5编程入门》 Qt进阶书籍推荐官方的《C++ GUI Qt4编程》

  • 《Qt高级编程》

    《Qt高级编程》,作者: (英)Mark Summerfield ,《qt高级编程》以工程实践为主旨,是对qt现有...

  • Qt高级编程

    《Qt高级编程》,作者: (英)Mark Summerfield ,《qt高级编程》以工程实践为主旨,是对qt现有...

  • QT初学者入门

    Qt编程指南

  • Qt学习之网络编程

    一些说明 学了有一段时间的python了,小项目做了不少,最近由于项目需要,所以要回归老本行了,开始重点突击C++...

  • Qt tcp编程

    注意:网络编程需要在pro文件里添加 network,如该用到qSqldatabase 需要添加sql 例: QT...

  • Qt编程指南

    Qt编程指南 序言本教程《Qt编程指南》主要是写给Qt开发新手看的,当然前提必须学会C++,推荐《C++ Prim...

网友评论

    本文标题:【9】QT网络编程

    本文链接:https://www.haomeiwen.com/subject/wqkzattx.html