一、原地等待延时
利用Qtime实现
#include <QTime>
void Delay_MSec(unsigned int msec)
{
QTime _Timer = QTime::currentTime().addMSecs(msec);
while( QTime::currentTime() < _Timer )
QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
}
二、文件操作
保存数据到文件、创建文件夹、新建文件
创建文件夹:QDir().mkdir(fullPath)
新建文件:QFile file()
的时候,如果该xxx.txt
不存在,会自动新建该文件,后缀可以任意定义。注意file.open
的参数模式,QIODevice::WriteOnly
写数据的时候会直接清除原来的数据,再写进去,其他的模式,如果当前写进去的长度比原来的少,只会覆盖前面的数据,原来的后半部分还会保留
保存数据到文件:file.write()
,如果传入的数据是QString
,需转换成QArray
,注意转换过程用toUtf8().data()
,这样有中文时就不会乱码。
#include <QDebug>
#include <QFile>
#include <QDir>
void saveParams_firmwreDir(QString value)
{
// 判断文件夹是否存在,不存在则创建
QString fullPath = "C:/Users/Public/xxx";
QDir dir(fullPath);
if(!dir.exists()){
bool ismkdir = QDir().mkdir(fullPath);
if(!ismkdir)
qDebug() << "Create path fail" << endl;
else
qDebug() << "Create fullpath success" << endl;
}
else{
qDebug() << "fullpath exist" << endl;
}
QFile file("C:/Users/Public/xxx/xx.txt");
if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
return;
file.write(value.toUtf8().data(), qstrlen(value.toUtf8().data()));
file.close();
}
获取文件中的数据
QString getParams_firmwreDir(void)
{
QFile file("C:/Users/Public/xxx/xx.txt");
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return "no file";
QByteArray t = file.readAll();
file.close();
if(t.length() == 0){
return "no content";
}
return QString(t);
}
文件操作
- 获取文件
- 获取当前文件夹的所有文件
- 获取文件的后缀
- 打开文件
- 获取文件中的内容
QString fileSuffix;
QByteArray fileContent;
QString fileName;
QString filePath;
//获取文件
fileName = QFileDialog::getOpenFileName(this,
tr("打开文件"), "c:/", tr("Image Files (*)"));
//获取文件夹路劲
filePath = QFileDialog::getExistingDirectory(this, "获取文件夹路劲", "");
//获取当前文件夹的所有文件
QDir *dir=new QDir(filePath);
QStringList filter;
QList<QFileInfo> *fileInfo=new QList<QFileInfo>(dir->entryInfoList(filter));
for(int i = 0;i<fileInfo->count(); i++)
{
qDebug()<<"file Path"<<fileInfo->at(i).filePath();
qDebug()<<"file Name"<<fileInfo->at(i).fileName();
}
if (fileName.length())
{
//获取文件的后缀
QFileInfo fi(fileName);
fileSuffix = fi.suffix(); // fileSuffix = "gz"
//打开文件
QFile file(fileName);
if (file.open(QIODevice::ReadOnly | QIODevice::Text))
{
//获取文件中的内容
fileContent = file.readAll();
file.close();
}
}
更新
实现对多个子内容的操作
/**
*
* 获取整个配置文件的内容
*
* ret: true文件存在,获取成功,false文件不存在
*/
bool params_getAll(QString *getValue)
{
QFile file("C:/Users/Public/xxx/xx.conf");
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return false;
QByteArray t = file.readAll();
file.close();
if(t.length() == 0){
return false;
}
*getValue = QString(t);
return true;
}
/**
*
* 获取文件中内容的某个子内容
* key:子内容的名称
* getValue:获取返回的子内容
*
* ret: true文件存在,获取成功,false文件不存在
*/
bool params_getItemContent(QString key, QString *getValue)
{
bool retSta = false;
QString valueGet;
bool getSta = params_getAll(&valueGet);
qDebug() << "valueGet:" <<valueGet;
if (getSta)
{
if (valueGet.contains("\n"))
{
QStringList getList = valueGet.split("\n");//先分解成list
valueGet = "";
foreach (const QString &str, getList) {
QString strSrc = str;
if (strSrc.contains(key)){
qDebug() << "find item" ;
*getValue = strSrc.remove(key+":");
qDebug() << "ItemContent:" <<*getValue;
retSta = true;
}
qDebug() << "item:" <<strSrc;
}
}else
{
if (valueGet.contains(key)){
qDebug() << "find item" ;
*getValue = valueGet.remove(key+":");
qDebug() << "ItemContent:" <<*getValue;
retSta = true;
}
}
}
return retSta;
}
/**
*
* 保存内容到文件
* key:子内容的名称
* value:写入的子内容
*
* content:
* 若文件或文件夹不存在,自动创建
* 保存路劲:C:/Users/Public/xxx,是为了不同电脑统一路劲
*/
bool params_saveItem(QString key, QString value)
{
// 判断文件夹是否存在,不存在则创建
QString fullPath = "C:/Users/Public/xxx";
QDir dir(fullPath);
if(!dir.exists()){
bool ismkdir = QDir().mkdir(fullPath);
if(!ismkdir){
qDebug() << "Create path fail" << endl;
return false;
}
else{
qDebug() << "Create fullpath success" << endl;
}
}
else{
qDebug() << "fullpath exist" << endl;
}
QString valueGet;
bool getSta = params_getAll(&valueGet);
qDebug() << "valueGet:" <<valueGet;
if (getSta)
{
if (valueGet.contains("\n"))
{
QStringList getList = valueGet.split("\n");//先分解成list
qDebug() << "getList:" <<getList;
valueGet = "";
//重组字符串,去掉原来的子内容
foreach (const QString &str, getList) {
QString strSrc = str;
if (!strSrc.contains(key)){
qDebug() << "find item" ;
strSrc.remove("\r").remove("\n");
if(strSrc != ""){
valueGet.append(strSrc+"\n");
}
}
qDebug() << "item:" <<strSrc;
}
}
}
//添加新的数据
valueGet.append(key+":"+value+"\n");
//写数据到本地文件,如果文件不存在,自动创建文件
QFile file("C:/Users/Public/xxx/xx.conf");
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)){
return false;
}
file.write(valueGet.toUtf8().data(), qstrlen(valueGet.toUtf8().data()));
file.close();
return true;
}
三、不同数据转换
1、QString
<==>QArray
QString
==>QArray
toUtf8()
只是其中一种类型,其他见QT的帮助
QString value;
QArray result;
result = value.toUtf8().data()
QArray
==>QString
QArray inArray;
QString value(inArray);
QArray
==>十六进制的QString
QArray inArray;
QString value(inArray.toHex());
2、十进制数
<==>QString
十进制数
==>QString
比如int
,double
int numb = 10;
QString value = QString::number(numb);
QString
==>十进制数
如果QString
的开始含有数字的字符串,就可以转换成十进制数
。toInt()中的参数16
表示QString
是十六进制的字符串,10
表示十进制
bool ok;
int numb = 10;
QString value = "123";
numb = value.toInt(&ok, 16);
四、局部变量
一定要在花括号里定义,若switch分支,需要用花括号包含