4.关于QT中的QFile文件操作,QBuffer,Label上添加QPixmap,QByteArray和QString之间的区别,QTextStream和QDataStream的区别,QT内存映射(



  1. 新建项目13IO

13IO.pro

HEADERS
+=
\

   
MyWidget.h

 

SOURCES
+=
\

   
MyWidget.cpp

 

QT
+=
gui widgets
network

CONFIG
+=
C++11

MyWidget.h

#ifndef MYWIDGET_H
#define MYWIDGET_H
 
#include <QWidget>
 
class MyWidget : public QWidget
{
    Q_OBJECT
public:
    explicit MyWidget(QWidget *parent = 0);
 
signals:
 
public slots:
 
};
 
#endif // MYWIDGET_H

MyWidget.cpp

#include "MyWidget.h"
#include <QFile>
#include <QApplication>
//#include <QDebug>
//#include <QBuffer>
//#include <QLabel>
//#include <QTextStream>
//#include <QDataStream>
 
/**
 * QFile
 * QBuffer     //memory file
 * QTcpSocket
 * QUdpSocket
 *
 * QDataStream
 * QTextStream
 */
 
MyWidget::MyWidget(QWidget *parent) :
    QWidget(parent)
{
    //QT中不建议使用char *这种类型的数据类型
    QFile file("../MyTest.txt");
    file.open(QIODevice::ReadWrite);
 
    file.write(QByteArray("abc"));
    //同样,QFile中也有如下方法
    //file.seek();
    //file.write();
    file.close();
}
 
int main(int argc,char** argv)
{
    QApplication app(argc,argv);
 
    MyWidget w;
    w.show();
 
    return app.exec();
}

运行结果:

生成的MyTest.txt文件的内容如下:

 

2
关于QBuffer

#include
"MyWidget.h"

#include
<QApplication>

#include
<QDebug>

#include
<QBuffer>

//#include
<QLabel>

//#include
<QTextStream>

//#include
<QDataStream>

 

/**

 *
QFile

 *
QBuffer    
//memory
file

 *
QTcpSocket

 *
QUdpSocket

 *

 *
QDataStream

 *
QTextStream

 */

 

MyWidget::MyWidget(QWidget
*parent)
:

   
QWidget(parent)

{

   
QBuffer
buffer;

   
buffer.open(QIODevice::ReadWrite);

 

   
buffer.write("abc");

   
buffer.write("aabbcc");

 

   
buffer.close();

 

   
//可以知道buffer中存储的是缓冲区,通过下面的方式看看buffer中的内容是什么

   
qDebug()
<<
buffer.buffer();

}

 

int
main(int
argc,char**
argv)

{

   
QApplication
app(argc,argv);

 

   
MyWidget
w;

   
w.show();

 

   
return
app.exec();

}

运行结果:

 

3 QBuffer
和 QPixmap实现在Label上添加图片,下面是内存文件的应用

#include
"MyWidget.h"

#include
<QApplication>

#include
<QDebug>

#include
<QBuffer>

#include
<QLabel>

//#include
<QTextStream>

//#include
<QDataStream>

 

/**

 *
QFile

 *
QBuffer    
//memory
file

 *
QTcpSocket

 *
QUdpSocket

 *

 *
QDataStream

 *
QTextStream

 */

 

MyWidget::MyWidget(QWidget
*parent)
:

   
QWidget(parent)

{

   
//
send
side

QBuffer
buffer;

//不要路径,因为它的内容是写在内存里面的。

   
buffer.open(QIODevice::ReadWrite);

QPixmap
pixmap("../aaa.png");

//pixmap的save实际上有两个参数,保存成相应的文件的时候要指定相应的格式,PNG是不是真,JPG是失真的。JPG是有损压缩,PNG是无损压缩。

   
pixmap.save(&buffer,
"PNG");

   
buffer.close();

 

   
qDebug()
<<
buffer.buffer().size();

 

   
//
recv
side

QPixmap
pixmap2;

//通过loadFromData把它收起来。

   
pixmap2.loadFromData(buffer.buffer(),
"PNG");

 

   
QLabel*
label
=
new
QLabel(this);

   
label->setPixmap(pixmap2);

}

 

int
main(int
argc,char**
argv)

{

   
QApplication
app(argc,argv);

 

   
MyWidget
w;

   
w.show();

 

   
return
app.exec();

}

运行结果:

 

4 QByteArray和QString之间的区别

#include
"MyWidget.h"

#include
<QApplication>

#include
<QDebug>

#include
<QBuffer>

#include
<QLabel>

//#include
<QTextStream>

//#include
<QDataStream>

 

/**

 *
QFile

 *
QBuffer    
//memory
file

 *
QTcpSocket

 *
QUdpSocket

 *

 *
QDataStream

 *
QTextStream

 */

 

MyWidget::MyWidget(QWidget
*parent)
:

   
QWidget(parent)

{

   
//关于QByteArray和QString

   
//QByteArray编码的时候将一个汉字编码成3个字节

   
QByteArray
ba("涂作权");

   
//QSting中有自己字符,它的大小就是几个字符

   
QString
str("涂作权");

   
qDebug()
<<
ba.size()
<<
str.size();

}

 

int
main(int
argc,char**
argv)

{

   
QApplication
app(argc,argv);

 

   
MyWidget
w;

   
w.show();

 

   
return
app.exec();

}

 

5 QTextStream和QDataStream的区别

#include
"MyWidget.h"

#include
<QApplication>

#include
<QDebug>

//#include
<QBuffer>

#include
<QFile>

//#include
<QLabel>

#include
<QTextStream>

//#include
<QDataStream>

 

/**

 *
QFile

 *
QBuffer    
//memory
file

 *
QTcpSocket

 *
QUdpSocket

 *

 *
QDataStream

 *
QTextStream

 */

 

MyWidget::MyWidget(QWidget
*parent)
:

   
QWidget(parent)

{

   
QFile
file("../teststream.txt");

   
//QTextStream需要一个QIODevice来构造它

   
file.open(QIODevice::ReadWrite);

 

   
QTextStream
textStream(&file);

 

   
//通过下面的方式可以写文件,并且文件内容中是正常的

   
textStream
<<
1
<<
"abc"
<<
1.2
<<
QString("abc");

 

file.close();

//运行之后,在项目所在目录下发现多了teststream.txt文件,文件内容如下:

#if
0

   
//如果想写进去很方便读出来的话使用DataStream

   
QFile
file("../teststream.txt");

   
file.open(QIODevice::ReadWrite);

 

   
QDataStream
dataStream(&file);

   
dataStream
<< 1
<< "abc"
<< 1.2
<< QString("abc")
<< QPoint(1,1);

file.close();

//上面的运行结果如下:

#endif

}

 

int
main(int
argc,char**
argv)

{

   
QApplication
app(argc,argv);

 

   
MyWidget
w;

   
w.show();

 

   
return
app.exec();

}

 

6
内存映射,虚拟内存,可以使用多台电脑操作同一个文件(只要指针指向文件的位置不同就可以)

#include "MyWidget.h"
#include <QApplication>
#include <QDebug>
//#include <QBuffer>
#include <QFile>
//#include <QLabel>
#include <QTextStream>
//#include <QDataStream>
 
/**
 * QFile
 * QBuffer     //memory file
 * QTcpSocket
 * QUdpSocket
 *
 * QDataStream
 * QTextStream
 */
 
MyWidget::MyWidget(QWidget *parent) :
    QWidget(parent)
{
    //虚拟内存和内存映射,QFile可以自动创建文件
    QFile file("../map.txt");
 
    file.open(QIODevice::ReadWrite);
    //扩展文件的大小为64k
    file.seek(64 * 1024);
    //向文件中写入1
    file.write("1");
    //文件关闭
    file.close();
    //然后再通过ReadWrite的方式构造它
    file.open(QIODevice::ReadWrite);
    //构造内存映射
    uchar* ptr = file.map(0,64*1024);
    //可以像指针一样来操作文件内容
    *ptr = 'a';
    ptr[1] = 'b';
 
    //read file
    uchar ch = *ptr;
    file.unmap(ptr);
    file.close();
}
 
int main(int argc,char** argv)
{
    QApplication app(argc,argv);
 
    MyWidget w;
    w.show();
 
    return app.exec();
}
//运行结果:

 

时间: 2024-08-30 19:21:46

4.关于QT中的QFile文件操作,QBuffer,Label上添加QPixmap,QByteArray和QString之间的区别,QTextStream和QDataStream的区别,QT内存映射(的相关文章

让你提前认识软件开发(18):C语言中常用的文件操作函数总结及使用方法演示代码

第1部分 重新认识C语言 C语言中常用的文件操作函数总结及使用方法演示代码           在C语言中,有关文件操作的函数多达数十种,但并非每个函数都经常会被用到.        本文对实际软件开发项目中常用的C文件操作函数的用法进行了总结,并用实际的C代码来演示了它们的用法.   1. C语言中常用的文件操作函数总结 (1) fopen 作用:打开文件. 表头文件:#include <stdio.h> 定义函数:FILE *fopen(const char *path, const ch

Qt中的qrc文件

Qt中的qrc文件是一个xml格式的资源配置文件,与应用程序关联的应用程序由 .qrc 文件来指定,它用XML记录硬盘上的文件和对应的随意指定的资源名称,应用程序通过资源名称来访问资源.        指定的路径是 .qrc 文件所在目录的相对路径.注意,列出的资源文件必须位于 .qrc 文件所在目录或者其子目录下. 图标文件需要与qrc文件位于同一目录下或者在该目录的子目录中.另外,如果qrc文件中使用了前缀(例如<qresource prefix="/myresources"

Node.js程序中的本地文件操作用法小结_node.js

Node最引以为傲的就是它有一个非常小的核心.有一些语言绑定了完整的POSIX API,而 Node实现了尽可能少的绑定,并通过同步.异步或流API形式暴露他们. 这种方法意味着,操作系统中有一些非常方便的功能,需要在Node中重建.这是一个教你如何使用文件系统软件包的实用教程. 引用文件与文件系统的交互很重要的一点是要指向正确的文件.由于NPM的包使用相对路径引用,所以你不能把路径写死在代码.有两个主要方式来以确保包能引用到正确的文件: // 使用 `path.join()` 而不是 `+`

2.QT中使用资源文件,程序打包

 1 程序中使用资源文件 A  一个QT空项目 B  右击项目,添加新文件 添加后的效果是 C  右击main.prc,选择"添加现有项",找到要使用的资源文件.最终的效果是: D 使用qrc文件 T27Resource.pro RESOURCES += \     main.qrc   SOURCES += \     main.cpp   QT += gui widgets main.cpp #include <QApplication> #include <

Node.js中常规的文件操作总结_node.js

前言 Node.js 提供一组类似 UNIX(POSIX)标准的文件操作API. Node 导入文件系统模块(fs)语法如下所示: var fs = require("fs") fs模块是文件操作的封装,它提供了文件的读取.写入.更名.删除.遍历目录.链接等POSIX文件系统操作.与其他模块不同的是,fs模块中所有的操作都提供了异步和同步的两个版本,例如读取文件内容的函数有异步的fs.readFile()和同步的fs.readFileSync() . 一. 目录操作 1. 创建目录 创

关于自动更新中MoveFile 等文件操作未声明的问题

问题描述 我在参考<VB.Net程序设计:AutoUpdater软件自动更新-源代码>http://blog.csdn.net/linjimu/article/details/5155586时,提示如下图所示:所有关于文件操作的全部都提示错误!如:ForEachdfInMe.RunOnceExeFileListHelpfn=IO.Path.Combine(saveUpdateFolder,df.FileName)DeleteFile(fn,DeleteType.OutOfDisk)Next则提

请教一个.net中对.txt文件操作的问题,请高手帮忙看一下!!

问题描述 下载推荐人配置文件introduce.txt,保存神州游游戏大厅的神州游游戏目录中.通过这台机器注册的所有游戏用户,您的帐号将成为默认推荐人.配置文件introduce.txt的保存路径:假设您的唐人游游戏大厅默认安装在C:ProgramFiles神州游游戏目录下,则推荐人配置文件为:C:ProgramFiles神州游游戏introduce.txt这个功能怎么实现呀,高手帮忙看一下呀,急呀!!! 解决方案 解决方案二:???解决方案三:下载推荐人配置文件introduce.txt,保存

在HTML代码中嵌入Flash文件的解决方案!(上)

这几天恰逢公司网站首页需要改版,去年底公司"人员精简"后,一个人得做多个人的活,忽然之间发觉担子重了.这不,本不是我工作范围内的事情,不幸也让我参与其中了,不幸中的幸事是这次BOSS交给我的任务,恰是我一直热衷的前端开发任务.之前一直从事公司网站的后台管理程序开发,更多是在服务器端处理业务逻辑,一直没有机会在我热衷的前端开发上施展拳脚.实践是检验真知的最好途径,通过解决分派给我的实际任务正是一次难得的大检验,通过书本和各种资料学习许多零散的知识,却未得机会将他们揉合在一起来次"

文件操作-把内存卡上的.iso移到桌面上,怎么要这么复杂?

问题描述 把内存卡上的.iso移到桌面上,怎么要这么复杂? 可移动磁盘里,也就是手机内存卡里有个后缀名为.iso 的东东,为什么我直接把它移动电脑桌面上,电脑的右下角就出现下面这个提示.后来我想了种方法,先到网吧的电脑上把这个.iso 发送给某个好友,再跑回家自己的电脑上把发送给好友的这个东东下载到桌面上,果然成功了.好无语为什么把这样的.iso 发到桌面上要经过这样的步骤,而不能直接移动桌面上?还有没有别的办法可以移动.iso 这个东东从内存卡到桌面,从桌面到内存卡就可以直接移动. 解决方案