BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #47413同步于 2010/12/6
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

Qt里的write是怎么用的?assist里面实在找不到啊,麻烦各位大牛

realerge
2010/12/6镜像同步2 回复
rt,或许得C++里的函数?形式是这样的write(char *,qint64),返回值未知,我不知道这是往哪儿写啊,求大牛指点。 #include "nfclient.h" #include <QByteArray> #include <QDataStream> #include <QFile> #include <QHostAddress> nfClient::nfClient(QObject *parent) : QTcpSocket(parent)//QAbstractSocket(QAbstractSocket::TcpSocket, parent) { connect(this, SIGNAL(connected()), this, SLOT(on_connected())); connect(this, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(displaySocketError(QAbstractSocket::SocketError))); } void nfClient::sendFile(const QString &file, const QHostAddress &dest) { filePath = file; connectToHost(dest, 5234); qDebug() << "Send file " << file; } void nfClient::sendFile(const QString &file, const QString &dest) { filePath = file; connectToHost(dest, 5234); qDebug() << "Send file " << file; } void nfClient::on_connected() { qDebug() << "Connected"; QFile file(filePath); if(!file.open(QIODevice::ReadOnly)) { emit onError(2); disconnectFromHost(); return; } else emit fileSize(file.size()); emit message(tr(" Start send!")); QString fileName = file.fileName(); fileName = fileName.remove(0, fileName.lastIndexOf('/')+1); qint64 size; QByteArray block; QDataStream out(&block, QIODevice::WriteOnly); out.setVersion(QDataStream::Qt_4_0); out << qint16(0x0001) << fileName.toUtf8(); size = block.size(); [color=#5F9EA0]write((char*)&size, sizeof(qint64)); write(block.data(),[/color] size); //flush(); if(!waitForBytesWritten(-1)) { qDebug() << "writen Bytes error " << errorString(); throw 2; } do { block.clear(); out.device()->seek(0); out << qint16(0x0002) << file.read(0xFFF0); size = block.size(); qDebug() << "Send Data " << size << " byte."; write((char*)&size, sizeof(qint64)); write(block.data(), size); if(!waitForBytesWritten(-1)) { qDebug() << "writen Bytes error " << errorString(); throw 2; } }while(!file.atEnd()); sendEOF(); qDebug() << "FileSend finished."; emit message(tr(" Send finished!")); forever/*(int i=0; i < 10; i++)*/ { if(!waitForDisconnected()) { //sendEOF(); } else { //qDebug() << "Number is " << i << "."; qDebug() << "GoTo return."; return; } } qDebug() << "I will disconnected."; disconnectFromHost(); // have Error. } void nfClient::displaySocketError(QAbstractSocket::SocketError e) { qDebug() << "Error: " << e << "\n\t" << errorString(); if(e == QAbstractSocket::HostNotFoundError) emit onError(1); if(e == QAbstractSocket::ConnectionRefusedError) emit onError(3); } void nfClient::sendEOF() { qint64 size; QByteArray block; QDataStream out(&block, QIODevice::WriteOnly); out.setVersion(QDataStream::Qt_4_0); QByteArray data = filePath.toUtf8(); data.resize(0x8000); out << quint16(0x0003) << data << filePath.toUtf8(); size = block.size(); write((char*)&size, sizeof(qint64)); write(block.data(), size); if(!waitForBytesWritten(-1)) qDebug() << "Send EOF Error: " << errorString(); else qDebug() << "Send EOF"; }
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
realerge机器人#1 · 2010/12/6
自己顶下
ericyosho机器人#2 · 2010/12/7
http://doc.qt.nokia.com/4.7/qiodevice.html#write