好久没有学习Qt了,因为研究生开学,各种杂事,使得qt学习之路中断了一段时间,最近良心发现,要重拾qt,qt封装好了socket库,这使得我们我们调用socket库来创建网络应用相当快捷。比如用qt来下载一个文件,访问webserver都可以方便的使用。
如果要是想创建自己的SLOT函数,只需包含QAbstractSocket,然后查看document,重写4个规定的SLOT函数,就ok了。
众所周知qt网络编程一般都要有4个SLOT函数:1.连接主机2.断开连接3.准备读4.读出这样就可以分解每一步,做出自己想做的功能。
可以添加#inculde
然后重写slot函数 bytesWritten(qint64 bytes)然后将socket->readAll()就好。
void sockettest::Test() { socket = new QTcpSocket(this); connect(socket,SIGNAL(connected()),this,SLOT(connected())); connect(socket,SIGNAL(disconnected()),this,SLOT(disconnected())); connect(socket,SIGNAL(readyRead()),this,SLOT(readyRead())); connect(socket,SIGNAL(bytesWritten ( qint64 bytes )),this,SLOT(bytesWritten ( qint64 bytes ))); qDebug()<< "Connecting......"; socket->connectToHost("weibo.com",80); if(!socket->waitForConnected(1000)) { qDebug()<<"ERROR "<< socket->errorString(); } } void sockettest::connected () { qDebug()<<"connected"; socket->write("HEAD / HTTP/1.0\r\n\r\n\r\n"); } void sockettest::disconnected () { qDebug()<<"disconnected"; } void sockettest::bytesWritten ( qint64 bytes ) { qDebug()<<"we wrote: "<<bytes; } void sockettest::readyRead () { qDebug()<<"reading....."; qDebug()<< socket->readAll(); }
其中的 socket->connectToHost(“weibo.com”,80);就是连接网址,然后connected(),当连接完成以后,使用readyRead()打印server回复的消息。
对于QHttp 所以我们可以使用他来访问网页,然后重写三个SLOT函数
void stateChanged ( int state ); void responseHeaderReceived ( const QHttpResponseHeader & resp ); void requestFinished ( int id, bool error );
这三个函数可以触发各种自定义操作,比如将读到的文本写入本地文件,详细做法可以在void requestFinished ( int id, bool error );中实现
比如创建一个QFile 写入本地,
在QHttp中可以使用 http->setHost(“xxxy.lzu.edu.cn”); http->get(“/index.html”);
来访问网页获取需要的网页信息,时候调用 http->readAll()来读取~
下面的工作就是来熟悉API即可,Qt提供了丰富的SIGANL函数与SLOT接口!!!
切记!!!