QT使用过程记录

一、原地等待延时

利用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);
}

文件操作

  1. 获取文件
  2. 获取当前文件夹的所有文件
  3. 获取文件的后缀
  4. 打开文件
  5. 获取文件中的内容
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分支,需要用花括号包含

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt5中集成log4qt过程主要包括以下几个步骤: 1. 下载log4qt库:首先需要从log4qt的官方网站或者其他可靠的资源网站下载log4qt的源代码库。将下载的库解压到任意目录下。 2. 添加库到Qt项目:打开Qt Creator,打开需要集成log4qt的项目。在项目的.pro文件中添加log4qt库,可以使用类似于`LIBS += -L/path/to/log4qt -llog4qt`的方式添加。 3. 配置log4qt的头文件和源文件:在Qt Creator中,找到项目目录中的头文件和源文件文件夹,将解压的log4qt库中的包含文件和源文件拷贝到对应的文件夹中。 4. 编译并链接log4qt库:在Qt Creator中,点击编译按钮进行编译,并确保log4qt库能够成功链接到项目中。如果编译或链接出现问题,可以检查是否添加了正确的库路径和库文件。 5. 使用log4qt:在需要使用日志功能的代码文件中,包含log4qt的头文件,并根据需要创建log4qt的日志记录器对象。通过设置日志记录器的级别、格式等参数,可以配置日志的输出方式。 6. 输出日志:使用log4qt的日志记录器对象,可以通过不同的日志级别(如DEBUG、INFO、ERROR等)输出不同等级的日志信息。可以使用log4qt提供的API函数,将日志输出到控制台、文件等不同的目的地。 7. 测试和调试:完成上述步骤后,可以对项目进行测试和调试。在运行项目时,可以根据配置的日志级别,查看和分析log4qt输出的日志信息,以辅助项目的测试和调试工作。 总结起来,集成log4qtQt5项目中的过程包括添加库、配置头文件和源文件、编译链接库、使用log4qt输出日志等步骤。通过正确配置和使用log4qt,可以方便地实现日志功能,从而提高项目的测试和调试效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值