【1】QT文件操作

今天是作息表开始的第一天,凡是都得有个好的开始,如同所期望的一样,今天规矩的按照作息表执行了一番,感觉还不错,如同表上的安排写下这篇文章来做一下学习的总结。

【1】QT文件操作_第1张图片

1.参考资料

豆子博主QT学习之路2系列教程
书籍《Qt Quick 核心编程》
Qt参考手册

2.学习内容

文件操作
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

int main(int argc, char *argv[])
{
 QCoreApplication a(argc, argv);

 qDebug()<toUnicode(line);
 qDebug()<

备注:中文输出出现乱码,设置字符集可以解决,代码中已经给出。

二进制文件读写
#include 
#include 
#include 
#include 
#include 

int writefile()
{
 //写入文件
 QFile file("file.dat");
 file.open(QIODevice::WriteOnly);
 QDataStream out(&file);

 //写入魔术数字和版本
 out<<(qint32)0xA0B0C0D0;
 out<<(qint32)123;

 out.setVersion(QDataStream::Qt_4_0);

 //写入数据
 out<<"lots_of_interesting_data";

 file.flush();

 return 1;
}

int readfile()
{
 QFile file("file.dat");
 file.open(QIODevice::ReadOnly);
 QDataStream in(&file);

 //检查魔术数字
 quint32 magic;
 in>>magic;
 if(magic!=0xA0B0C0D0){
 return 0;
 }

 //检查版本
 qint32 version;
 in>>version;
 if(version<100){
 return 0;
 }
 if(version>123){
 return 0;
 }
 if(version<=110){
 in.setVersion(QDataStream::Qt_3_3);
 }else{
 in.setVersion(QDataStream::Qt_4_0);
 }
 //读取数据

 QByteArray s;
 if(version>=120){
 in>>s;
 }

 file.close();
 qDebug()<seek(0);
 stream>>strout;

 qDebug()<

备注:数据写入不成功在写入文件操作之后,关闭文件或者调用

file.flush();
文本文件读取
#include 
#include 
#include 
#include 

int main(int argc, char *argv[])
{
 QCoreApplication a(argc, argv);

 QFile data("file.txt");
 if(data.open(QFile::WriteOnly|QIODevice::Truncate)){
 QTextStream out(&data);
 out<<"The answer is"<<42;
 data.close();
 }

 QFile file("file.txt");
 if(file.open(QFile::ReadOnly)){
 QTextStream in(&file);
 QString str;
 str=in.readLine();
 qDebug()<
存储容器遍历
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

int main(int argc, char *argv[])
{
 QCoreApplication a(argc, argv);

 //java风格的遍历器
 {
 //QListIterator是只读遍历器
 QListlist;
 list<<"A"<<"B"<<"C"<<"D";
 QListIterator i(list);
 while(i.hasNext()){
 qDebug()<intlist;
 intlist<<1<<2<<3<<4<<5;
 QMutableListIterator j(intlist);
 while(j.hasNext()){
 if(j.next()%2!=0){
 j.remove();
 }
 }

 //输出改后的数据
 QListIterator l(intlist);
 while(l.hasNext()){
 qDebug()< map;
 map.insert(1,"A");
 map.insert(2,"B");
 map.insert(3,"C");

 QMapIterator i2(map);
 while (i2.hasNext()) {
 qDebug() << i2.next().value();
 }
 }

 //stl风格的遍历器
 {
 QListstrlist;
 strlist<<"A"<<"B"<<"C"<<"D";

 QList::iterator i1;
 for(i1=strlist.begin();i1!=strlist.end();++i1){
 *i1=(*i1).toLower();
 }

 //const_iterator进行只读访问
 QList::const_iterator j1;
 for(j1=strlist.constBegin();j1!=strlist.constEnd();++j1){
 qDebug()<<*j1;
 }

 QMap map1;
 map1.insert(1,1);
 map1.insert(2,2);
 map1.insert(3,3);

 QMap::const_iterator l1;
 for (l1 = map1.constBegin(); l1!= map1.constEnd(); ++l1) {
 qDebug() << l1.key() << ":" << l1.value();
 }
 }

 //foreach遍历
 QLinkedList list;
 list<<"a"<<"b"<<"c";
 QString str;
 foreach(str,list){
 qDebug()<

备注:
顺序存储容器:QList,QLinkedList,QVector,QStack和QQueue。
关联容器:QMap,QMultiMap,QHash,QMultiHash和QSet。
能够存储在容器中的数据必须是可赋值数据类型。
Java 风格的遍历器指向的是两个元素之间的位置。
Stl风格的遍历器指向元素本身。

大概就看了这么些内容,找bug和理解的时间倒是用了不少。

你可能感兴趣的:(【1】QT文件操作)