Tcp中 QDataStream QTextStream 数据流 、文本流的使用

QTextStream:

信号readRead():   当某个QIODevice(比如QTcpSocket)有新的数据可读时,该信号就会被触发。程序可以连接到该信号,并在该信号触发时读取数据。这个信号非常有用,可以用于实现异步的网络通信,即不必阻塞主线程,而是在数据到达时发出信号并交由另一个线程处理。

 // 建立读取信息的信号槽连接
    connect(client,SIGNAL(readyRead()),
            this,SLOT(readReadSlot()));

槽函数readReadSlot(): 读取服务器/客户端发送的数据。

  QTextStream input(client);//建立文本流对象
    QString msg = input.readAll();//读取全部数据
    qDebug() << msg << endl;

槽函数btnSendClickedSlot(): 给服务器/客户端发送信息。

void Dialog::btnSendClickedSlot()
{
    QString msg = ui->lineEdit->text();//lineEdit组件获得文本
    QTextStream output(client);
    output << msg; //将数据添加文本流对象中
}

QDataStream:

槽函数btnSendClickedSlot():  给服务器/客户端发送数据,使用QFileDialog类找到文件,QFile类打开文件,读取文件,将文件内容使用QDataStream写入服务器/客户端对象中。

void MainWindow::btnSendClickedSlot()
{
    //使用QFileDialog打开csv文件
    QString path = QFileDialog::getOpenFileName(this,"打开文件","","CSV(*.csv)");
    if(path == "")
    {
        QMessageBox::warning(this,"敬告","请打开要读取的文件!");
        return;
    }

    
    bool isok;
    //QFile类打开文件,读取文件信息
    QFile file(path);
    // 判断文件是否成功打开
    isok = file.open(QIODevice::ReadOnly|QIODevice::Text);
    if(isok == false)
    {
        QMessageBox::critical(this,"提示","打开文件失败");
        return;
    }

    //将数据读取放在存放字符串列表的列表中
    QString line;
    int count = 0;
    QList<QStringList> all_data;
    while(!file.atEnd())
    {
        //readLine()按行读取
        line = QString(file.readLine()).trimmed();
        //跳过前6行和空行
        if(count++ < 6||line.isEmpty())
        {
            continue;
        }
        //将字符串列表进行切片,按字符进行分割
        QStringList row = line.split(",");
        all_data.append(row); 
        if(file.atEnd())
            QMessageBox::information(this,"提示","文件读取成功");
    }

    //建立缓存区,通过DataStream进行数据传输
    QByteArray buffer;

    //建立QDataStream对象,使用QByteArray进行数据存储
    QDataStream output(&buffer,QIODevice::WriteOnly);
    
    //将数据输入
    output << all_data;

    //写入QTcpSocket对象,使用QByteArray
    client->write(buffer);
          
}

槽函数readReadSlot(): 读取服务器/客户端发送的数据


void MainWindow::readReadSlot()
{
     QByteArray buffer;
     QDataStream input(&buffer,QIODevice::ReadOnly);

     // 读取所有数据
     buffer = socket->readAll();

     //相同数据类型去接收
     QList<QStringList> data;
     input >> data;

     for(int i =0; i < data.size();++i)
     {
         QStringList data_slist = data[i];
           
         //使用join()方法将列表中的所有字符串连接起来
         QString data_string = data_slist.join(" ");
         ui->textBrowser->append(data_string);
     }
}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值