Qt5qstringqbytearray·

Qt5串口调试助手(8)--读取文件、保存数据功能

Hugh

Hugh

1830 0

1.文件读取及数据存储功能

在数据量比较大时,我们希望能够直接读取文件发送、或者将接收到的数据存储成文件,方便后续分析。如下图所示两个按钮将实现该功能。

2.读取文件功能

//读取文件,并显示在发送窗口

void MainWindow::on_pushButtonRdFile_clicked()
{
    QString curPath=QDir::currentPath();//获取系统当前目录
    QString dlgTitle="打开一个文件"; //对话框标题
    QString filter="文本文件(*.txt);;所有文件(*.*)"; //文件过滤器
    QString aFileName=QFileDialog::getOpenFileName(this,dlgTitle,curPath,filter);
    if (aFileName.isEmpty())
        return;
    openTextByIODevice(aFileName);

}
/***********************************************************
*编码格式转换
*防止GBK中文乱码
***********************************************************/
QString MainWindow::byteArrayToUnicode(const QByteArray &array)
{
    // state用于保存转换状态,它的成员invalidChars,可用来判断是否转换成功
    // 如果转换成功,则值为0,如果值大于0,则说明转换失败
    QTextCodec::ConverterState state;
    // 先尝试使用utf-8的方式把QByteArray转换成QString
    QString text = QTextCodec::codecForName("UTF-8")->toUnicode(array.constData(), array.size(), &state);
    // 如果转换时无效字符数量大于0,说明编码格式不对
    if (state.invalidChars > 0)
    {
        // 再尝试使用GBK的方式进行转换,一般就能转换正确(当然也可能是其它格式,但比较少见了)
        text = QTextCodec::codecForName("GBK")->toUnicode(array);
    }
    return text;
}

3.保存文件功能

/***********************************************************
*写文件函数
*执行文件保存工作
***********************************************************/
bool MainWindow::saveTextByIODevice(const QString &aFileName)
{ //用IODevice方式保存文本文件
    QFile aFile(aFileName);
    //aFile.setFileName(aFileName);
    if (!aFile.open(QIODevice::WriteOnly | QIODevice::Text))
        return false;
    QString str=ui->TextRev->toPlainText();//整个内容作为字符串
    QByteArray  strBytes=str.toUtf8();//转换为字节数组

    aFile.write(strBytes,strBytes.length());  //写入文件
    aFile.close();

    return true;
}

4.小结

上述涉及到文件处理,记得添加相应的头文件。

所属系列

从当前文章继续阅读它所在合集中的前后内容。

QT5串口调试助手RYCOM 第 9 / 14 篇
查看合集

手把手教你设计基于Qt5的串口调试助手,只需创建一个项目,一套代码,可实现跨越windows、linux、MacOS三大操作系统桌面应用软件。

相关文章

优先推荐同专题、同标签和同作者内容,补足热门文章。

评论 0

登录 后参与评论

评论

成为第一个评论的人