• 6766阅读
  • 1回复

[提问]QDataStream 的使用 [复制链接]

上一主题 下一主题
离线flybabys
 

只看楼主 倒序阅读 楼主  发表于: 2011-05-27

请教各位达人,如何把从文件取出的QDataStream 数据流按照所需要的大小划分成小片段的数据流逐次发送?
我的目的是从文件中读取数据然后发送至串口,每次发送128个字节。

voidMainWindow::on_KeyTone1_clicked()
{
unsignedintm,n;
char*sendbuf;
unsignedlonginti;
QStringfilename=QFileDialog::getOpenFileName(
this,
"OpenDocument",
QDir::currentPath(),
"WAVfiles(*.wav);;Allfiles(*.*)");//设定默认文件类型
if(!filename.isNull())//用户选择了文件
{
//处理文件
QMessageBox::information(this,"Document","Hasdocument",QMessageBox::Ok|QMessageBox::Cancel);
ui->KeyToneL1->setText(filename);//在QLineEdit中显示所选择的文件
QFilefile(filename);
if(file.open(QIODevice::ReadOnly)) //正常打开文件
{
i=file.size(); //取得文件大小
QByteArrayfile_buffer(file.size(),0);//开辟缓冲区
QDataStreamout(&file);
out.setVersion(QDataStream::Qt_4_7);
out.readRawData(file_buffer.data(),i); //读取文件
。。。。。。
myCom->write(file_buffer,128); //写串口,问题就在这里
file.close();
return;
}
}
else//用户取消选择
{
QMessageBox::information(this,"Document","Nodocument",QMessageBox::Ok|QMessageBox::Cancel);
}
}
离线tshirtmanid
只看该作者 1楼 发表于: 2011-05-27
bool TestQDataStream()
{
    QFile testFile("c:\\datastream.txt");
    if (!testFile.open(QIODevice::ReadOnly))
    {
        qFatal("open file failed");

        return false;
    }

    QDataStream ds(&testFile);

#define BUF_LEN 128
    char buff[BUF_LEN] = {0};

    //文件不为空
    while (!ds.atEnd())
    {
        int nReadBytes = ds.readRawData(buff, BUF_LEN);
        if (nReadBytes == -1)
        {
            qFatal("readRawData failed");

            return false;
        }
        else if (nReadBytes < BUF_LEN)
        {
            //少于128, 肯定是文件读完了,看你逻辑怎么处理吧,少于128字节的,串口数据你怎么组织?
            qDebug("the read bytes %d is less than %d", nReadBytes, BUF_LEN);
        }
        else
        {
            //刚好有128
            //这里用字符的方式打印出来
            for (int i = 0; i < BUF_LEN; ++i)
            {
                qDebug("%c    ", buff);
            }
        }
    }

    return true;

}
快速回复
限100 字节
 
上一个 下一个