qt文件读取

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了qt文件读取相关的知识,希望对你有一定的参考价值。

有一个txt文件,第一行是内容是”food 10“,"food"是字符串,"10"整型数,怎么用qt读取这个文件第一行并分别将这二者传递给两个变量?

1、Qt 作为一个通用开发库,提供了跨平台的文件操作能力。文件操作是应用程序必不可少的部分。
2、Qt5增加了QFileDevice类。途中所涉及的类及其用途简要说明如下:
· QFlie:访问本地文件或者嵌入资源;
· QTemporaryFile:创建和访问本地文件系统的临时文件;
· QBuffer:读写QByteArray;
· QProcess:运行外部程序,处理进程间通讯;
· QTcpSocket:TCP协议网络数据传输;
· QUdpSocket:传输 UDP 报文;
· QSslSocket:使用 SSL/TLS 传输数据;
· QFileDevice:新增加的类,提供了有关文件操作的通用实现。
3、这其中,QProcess、QTcpSocket、QUdpSoctet和QSslSocket是顺序访问设备。所谓“顺序访问”,是指它们的数据只能访问一遍:从头走到尾,从第一个字节开始访问,直到最后一个字节,中途不能返回去读取上一个字节;QFile、QTemporaryFile和QBuffer是随机访问设备,可以访问任意位置任意次数,还可以使用QIODevice::seek()函数来重新定位文件访问位置指针。
4、QFile主要提供了有关文件的各种操作,比如打开文件、关闭文件、刷新文件等。我们可以使用QDataStream或QTextStream类来读写文件,也可以使用QIODevice提供的read()、readLine()、readAll()以及write()这样的函数。值得注意的是,有关文件本身的信息,比如文件名、文件所在目录的名字等,则是通过QFileInfo获取,而不是自己分析文件路径字符串。
5、举个例子,打开文件时,需要参数指定打开文件的模式:
Constant Value Description
QIODevice::NotOpen 0x0000 The device is not open.
QIODevice::ReadOnly 0x0001 The device is open for reading.
QIODevice::WriteOnly 0x0002 The device is open for writing.
QIODevice::ReadWrite ReadOnly | WriteOnly The device is open for reading and writing.
QIODevice::Append 0x0004 The device is opened in append mode, so that all data is written to the end of the file.
QIODevice::Truncate 0x0008 If possible, the device is truncated before it is opened. All earlier contents of the device are lost.
QIODevice::Text 0x0010 When reading, the end-of-line terminators are translated to \'\\n\'. When writing, the end-of-line terminators are translated to the local encoding, for example \'\\r\\n\' for Win32.QIODevice::Unbuffered 0x0020 Any buffer in the device is bypassed.
参考技术A 1. 使用QFile和QTextStream读取文本文件,可以按行读取(每一行看作一个字符串)。例子网上很多。
2. 读取一行后,调用QString::split函数,以空格为分隔符,将储存每一行的QString变量分隔成前后两部分,返回值在一个QStringList中。(List中有两个字符串了)3. 把 List中第二个字符串转换成整数,参考QString的ToInt()方法。本回答被提问者采纳

QT+PCL 读取文件乱码问题

QT+PCL构建处理程序时,QT读取文件的文件名为QString类型,在PCL的读取pcd文件等函数上,文件名多为标准字符转类型std::string.如果之间转换,在QT中提供有转换函数toStdString().在文件名为中文时,转换结果在中文部分时出现乱码,导致文件读取失败。下面是解决办法

普通转换方法:

1 QString qstr;
2 string str;
3 str = qstr.toStdString();
4 qstr = QString::fromStdString(str);

对于适应中文乱码的转换方法:

1 std::string cstr;
2 QString qstring;
3 //从std::string 到QString
4 qstring = QString(QString::fromLocal8Bit(cstr.c_str()));
5 //从QString 到 std::string
6 cstr = string((const char *)qstring.toLocal8Bit());
7 //不需要从gbk转到utf8
8 QString value_content = QString::fromStdString(vec[i].content);
9 QString value_classname = QString::fromStdString(vec[i].classname);

 

以上是关于qt文件读取的主要内容,如果未能解决你的问题,请参考以下文章

qt读取文件内容全部为浮点数的二进制文件

Qt读取文本文件乱码怎么办

QT+PCL 读取文件乱码问题

QT中怎样读取中文文本文件!

Qt:文件读取不起作用

Qt中如何读取csv文件到二维数组