QT串口助手(五):文件操作 (3)

Returns a null string if the position index exceeds the length of the string. If there are less than n characters available in the string starting at the given position, or if n is -1 (default), the function returns all characters that are available from the specified position.

Example:

QString x = "Nine pineapples"; QString y = x.mid(5, 4); // y == "pine" QString z = x.mid(5); // z == "pineapples" 2.5、数据保存

当保存数据按钮按下时,将接收框数据按文本方式进行保存:

/* 函 数:on_SaveData_Button_clicked 描 述:保存数据按钮点击槽函数 输 入:无 输 出:无 */ void Widget::on_SaveData_Button_clicked() { QString data = ui->Receive_TextEdit->toPlainText(); if (data.isEmpty()) { QMessageBox::information(this, "提示", "数据内容空"); return; } QString curPath = QDir::currentPath(); //获取系统当前目录 QString dlgTitle = "保存文件"; //对话框标题 QString filter = "文本文件(*.txt);;所有文件(*.*)"; //文件过滤器 QString filename = QFileDialog::getSaveFileName(this,dlgTitle,curPath,filter); if (filename.isEmpty()) { return; } QFile file(filename); if (!file.open(QIODevice::WriteOnly)) { return; } /*保存文件*/ QTextStream stream(&file); stream << data; file.close(); }

QTextStream::QTextStream(FILE **fileHandle, QIODevice::OpenModeopenMode* = QIODevice::ReadWrite)

Constructs a QTextStream that operates on fileHandle, using openMode to define the open mode. Internally, a QFile is created to handle the FILE pointer.

This constructor is useful for working directly with the common FILE based input and output streams: stdin, stdout and stderr. Example:

QString str; QTextStream in(stdin); in >> str; 三、扩展

这里对接收模块的功能进行一个补充。上面说了应用程序默认编码是UTF-8,那么如果在ascii显示模式下收到的数据是GBK格式的编码就会造成显示乱码,所以需要对接收数据进行编码判断,如果是GBK编码则进行转换显示。

/* 函 数:SerialPortReadyRead_slot 描 述:readyRead()信号对应的数据接收槽函数 输 入:无 输 出:无 */ void Widget::SerialPortReadyRead_slot() { /*读取串口收到的数据*/ QByteArray bytedata = serial->readAll(); //......省略 if(ui->HexDisp_checkBox->isChecked() == false) //ascii显示 { /* 判断编码 */ QTextCodec::ConverterState state; //调用utf8转unicode的方式转码,获取转换结果 QString asciidata = QTextCodec::codecForName("UTF-8")->toUnicode(bytedata.constData(),bytedata.size(),&state); //存在无效字符则是GBK,转码后返回 if (state.invalidChars > 0) { asciidata = QTextCodec::codecForName("GBK")->toUnicode(bytedata); } else { asciidata = QString(bytedata); } //......省略 } //......省略 }

QT串口助手(五):文件操作

四、总结

本章主要讲解对文件的操作。除了需要了解在QT中对文件类的常用操作之外,个人认为还有比较重要的两个知识点:1是文本编码的判断和转码处理,2是对于二进制文本的读取。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzgzdj.html