QT日志系统创建,读取,修复

一. 内容简介

构建QT日志系统。遇到的问题以及结局办法,读取日志文件,用于检查程序运行情况,并且修复异常数据。

二. 软件环境

2.1 QT 5.14.1

新版QT6.4,,6.5在线安装经常失败,而5.9版本又无法编译64位程序,所以就采用5.14.1这个用的比较多也比较稳定的一个版本。
QT编译器采用的是MSVC2017 64bit。
链接:https://pan.baidu.com/s/1ER98DPAkTUPlIyCC6osNNQ?pwd=1234

2.3 Visual studio 2017

Visual stdio采用2017主要是因为QT5.14.1最高到MSVC2017 64bit。

三. 主要流程

3.1 介绍用到的东西

3.2 读取日志文件,用于检查程序运行情况

3.3 检查并修复异常数据

四. 具体步骤

4.1 介绍用到的东西

日志系统的作用,记录运行情况,方便自己调试,也可以看到程序运行时间。根据日志可以看到程序上次是否正常运行,如果是异常退出,可以根据日志对异常操作做一些处理,就比如往数据库中存数据,没存完程序退出,这时候就可以根据日志删除错误数据了。主要的技术就是读写文件。
下面代码引用别人的,这块代码主要用于日志输出格式设置,这个博主写的很好,我拿了其中一段。

     // 设置输出信息格式
     QString current_date_time = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss ");
     QString current_date = QString("(%1)").arg(current_date_time);
     QString message = QString("%1 %2").arg(current_date).arg(msg);
     // 输出信息至文件中(读写、追加形式)
     QFile file("log.txt");
     file.open(QIODevice::WriteOnly | QIODevice::Append);
     QTextStream text_stream(&file);
     text_stream << message << "\r\n";
     file.flush();
     file.close();

博主给封装函数了,而且博主建议将这个日志用的东西都封装为一个模块,下面我封装了一部分
头文件

#ifndef MLOG_H
#define MLOG_H

#include <QObject>
#include <QApplication>
#include <QtDebug>
#include <QFile>
#include <QTextStream>
#include <QDebug>
#include <QDateTime>
#include <QMutex>
#include <QString>
#include <qapplication.h>
#include <QMessageBox>
class Mlog : public QObject
{
    Q_OBJECT
public:
    QFile file;
    explicit Mlog(QObject *parent = nullptr);
    void Debug(QString msg);
    void Warning(QString msg);
    void Critical(QString msg);
    void Operation(QString msg);
    void fileClose();
    void fileRead();
    QString fileWrite(QString msg,QString model);
private:
signals:
};
#endif // MLOG_H

cpp

#include "mlog.h"
Mlog::Mlog(QObject *parent) : QObject(parent)
{
    file.setFileName("./log.txt");
    file.open(QIODevice::Append);
    file.close();
}
void Mlog::fileRead()
{
    file.open(QIODevice::ReadOnly);
    if(!file.isOpen())
    {
    }
    file.close();

    QFile f("./log.txt");
    f.open(QIODevice::Truncate);
    if(!f.isOpen())
    {
    }
    f.close();
}

void Mlog::Debug(QString msg)
{
    fileWrite(msg,"Debug");
}

void Mlog::Warning(QString msg)
{
    fileWrite(msg,"Warning");
}
void Mlog::Critical(QString msg)
{
    fileWrite(msg,"Critical");
}
void Mlog::Operation(QString msg)
{
    fileWrite(msg,"Operation");
}
void Mlog::fileClose()
{
    file.close();
}

QString Mlog::fileWrite(QString msg,QString model)
{
    file.open(QIODevice::WriteOnly | QIODevice::Append);
    if(!file.isOpen())
    {
        return "日志读取失败";
    }
    // 设置输出信息格式
    QString current_date_time = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss ");
    QString current_date = QString("(%1)").arg(current_date_time);
    QString message = QString("%1 %2: %3").arg(current_date).arg(model).arg(msg);
    // 输出信息至文件中(读写、追加形式)
    QTextStream text_stream(&file);
    text_stream << message << "\r\n";
    file.flush();
}

封装好了以后去用的时候,问题就来了许多,

1. 在mainwindow.h中实例一下对象的时候,就一直显示报错,这种情况

在这里插入图片描述
解决办法:因为mianwindow.h中包含了mlog.h,而在mlog.h中包含了mianwindow.h,就报错了,删mlog.h中包含的mianwindow.h就好了。

2. 构造函数作用是创建文件(假如没有的话,有的话就没影响),然后我想先读取上一次的运行情况,然后清空文件(用只写方式打开就可以清空),但是我的就一直报错。这些只写打开一直报错,然后后边只读也开始报错,没法用
void Mlog::fileRead()
{
    file.open(QIODevice::ReadOnly);
    if(!file.isOpen())
    {
    }
    file.close();

    QFile f("./log.txt");
    f.open(QIODevice::Truncate);
    if(!f.isOpen())
    {
    }
    f.close();
}

解决办法:
清空文件我发现我怎么写都报错,具体原因我也不知道,我就试着往里面加了点动作,他就不报错了,玄学。

    file.open(QIODevice::WriteOnly | QIODevice::Truncate);
    if(file.isOpen())
    {
        QByteArray array;
        while( !file.atEnd())//判断是否读到文件尾
        {
            array = file.readLine(); //按行读,追加
        }
        file.close();
    }
3. 在使用日志时候,在这个里面写的话,写多少个都没事,程序没问题,但是我在按键事件里面写超过一个就报错,我想可能是内存满了,我按键事件计算的东西很多。

在这里插入图片描述
解决办法:
我就没用这个类,也没用函数,而是直接在里面写了,就不报错了,奇奇怪怪,代码一个就下边写的

    QString current_date_time = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss ");
    QString current_date = QString("(%1)").arg(current_date_time);
    QFile f("./log.txt");
    f.open(QIODevice::WriteOnly | QIODevice::Append);
    QTextStream text_stream(&f);
    text_stream << QString("%1 %2: %3").arg(current_date).arg("Operation").arg("Prepare calculation;") << "\r\n";
    f.flush();
    f.close();
	

在之后,我索性就没用上边封好的类,而是在类里面又写了几个函数,但是输出语句就单独写了,写的函数只是用来处理数据

// 定义
    QFile file;
    void Debug(QString msg);
    void Warning(QString msg);
    void Critical(QString msg);
    void Operation(QString msg);

    void fileCreate();
    void fileRead1();
    void fileRead2();
    void fileClear();
    void fileOpen();
    QString fileWrite(QString msg,QString model);
    void fileClose();
// cpp
void MainWindow::Debug(QString msg)
{
    fileWrite(msg,"Debug");
}

void MainWindow::Warning(QString msg)
{
    fileWrite(msg,"Warning");
}

void MainWindow::Critical(QString msg)
{
    fileWrite(msg,"Critical");
}

void MainWindow::Operation(QString msg)
{
    fileWrite(msg,"Operation");
}

void MainWindow::fileClose()
{
    file.close();
}

void MainWindow::fileRead1()
{
    int n = 0;
    QString sss[100];
    file.open(QIODevice::ReadOnly);
    QString b[100][18];
    if(file.isOpen())
    {
        QByteArray array;
        while( !file.atEnd())//判断是否读到文件尾
        {
            array = file.readLine(); //按行读,追加
            if(array.length()>300){
                sss[n] = array;
                n++;
            }
        }
        file.close();
    }
    QString current_date_time = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss ");
    QString current_date = QString("(%1)").arg(current_date_time);
    QFile f("./log.txt");
    f.open(QIODevice::WriteOnly | QIODevice::Append);
    QTextStream text_stream(&f);
    text_stream << QString("%1 %2: %3").arg(current_date).arg("Debug").arg("------------") << "\r\n";
    f.flush();
    int h = 0;
    int ll = 0;
    int qqq[18][2];
    for(int i = 0;i<n;i++){
        ll = 0;
        h = 0;
        for(int q=0;q<sss[i].length();q++){
            // R
            if(sss[i][q] == "R"&&sss[i][q+1]==" "){
                qqq[ll][0] = q + 4;
                qqq[ll][1] = q + 15;
                if(sss[i][q+1]!=" "){
                    qqq[ll][0]++;
                    qqq[ll][1]++;
                }
                for (int j=qqq[ll][0];j<=qqq[ll][1];j++) {
                    b[i][ll][h] = sss[i][j];
                    h++;
                }
                h = 0;
                ll++;
            }
            // L
            if(sss[i][q] == "L"&&sss[i][q+1]==" "){
                qqq[ll][0] = q + 4;
                qqq[ll][1] = q + 15;
                if(sss[i][q+1]!=" "){
                    qqq[ll][0]++;
                    qqq[ll][1]++;
                }
                for (int j=qqq[ll][0];j<=qqq[ll][1];j++) {
                    b[i][ll][h] = sss[i][j];
                    h++;
                }
                h = 0;
                ll++;
            }
            // Rb
            if(sss[i][q] == "R"&&sss[i][q+1]=="b"){
                qqq[ll][0] = q + 4;
                qqq[ll][1] = q + 15;
                if(sss[i][q+1]!=" "){
                    qqq[ll][0]++;
                    qqq[ll][1]++;
                }
                for (int j=qqq[ll][0];j<=qqq[ll][1];j++) {
                    b[i][ll][h] = sss[i][j];
                    h++;
                }
                h = 0;
                ll++;
            }
            // C
            if(sss[i][q] == "C"&&sss[i][q+1]==" "){
                qqq[ll][0] = q + 4;
                qqq[ll][1] = q + 15;
                if(sss[i][q+1]!=" "){
                    qqq[ll][0]++;
                    qqq[ll][1]++;
                }
                for (int j=qqq[ll][0];j<=qqq[ll][1];j++) {
                    b[i][ll][h] = sss[i][j];
                    h++;
                }
                h = 0;
                ll++;
            }
            // s
            if(sss[i][q] == "s"&&sss[i][q+1]==" "){
                qqq[ll][0] = q + 4;
                qqq[ll][1] = q + 15;
                if(sss[i][q+1]!=" "){
                    qqq[ll][0]++;
                    qqq[ll][1]++;
                }
                for (int j=qqq[ll][0];j<=qqq[ll][1];j++) {
                    b[i][ll][h] = sss[i][j];
                    h++;
                }
                h = 0;
                ll++;
            }
            // Rf
            if(sss[i][q] == "R"&&sss[i][q+1]=="f"){
                qqq[ll][0] = q + 4;
                qqq[ll][1] = q + 15;
                if(sss[i][q+1]!=" "){
                    qqq[ll][0]++;
                    qqq[ll][1]++;
                }
                for (int j=qqq[ll][0];j<=qqq[ll][1];j++) {
                    b[i][ll][h] = sss[i][j];
                    h++;
                }
                h = 0;
                ll++;
            }
            // tb
            if(sss[i][q] == "t"&&sss[i][q+1]=="b"){
                qqq[ll][0] = q + 4;
                qqq[ll][1] = q + 15;
                if(sss[i][q+1]!=" "){
                    qqq[ll][0]++;
                    qqq[ll][1]++;
                }
                for (int j=qqq[ll][0];j<=qqq[ll][1];j++) {
                    b[i][ll][h] = sss[i][j];
                    h++;
                }
                h = 0;
                ll++;
            }
            // R0
            if(sss[i][q] == "R"&&sss[i][q+1]=="0"){
                qqq[ll][0] = q + 4;
                qqq[ll][1] = q + 15;
                if(sss[i][q+1]!=" "){
                    qqq[ll][0]++;
                    qqq[ll][1]++;
                }
                for (int j=qqq[ll][0];j<=qqq[ll][1];j++) {
                    b[i][ll][h] = sss[i][j];
                    h++;
                }
                h = 0;
                ll++;
            }
            // M
            if(sss[i][q] == "M"&&sss[i][q+1]==" "){
                qqq[ll][0] = q + 4;
                qqq[ll][1] = q + 15;
                if(sss[i][q+1]!=" "){
                    qqq[ll][0]++;
                    qqq[ll][1]++;
                }
                for (int j=qqq[ll][0];j<=qqq[ll][1];j++) {
                    b[i][ll][h] = sss[i][j];
                    h++;
                }
                h = 0;
                ll++;
            }
            // Ks

        }
    }
    ui->bottom_console->appendPlainText(QString("%1").arg(b[5][0]));
    ui->bottom_console->appendPlainText(QString("%1").arg(b[5][1]));
    ui->bottom_console->appendPlainText(QString("%1").arg(b[5][2]));
    ui->bottom_console->appendPlainText(QString("%1").arg(b[5][3]));
    ui->bottom_console->appendPlainText(QString("%1").arg(b[5][4]));
    ui->bottom_console->appendPlainText(QString("%1").arg(b[5][5]));
    ui->bottom_console->appendPlainText(QString("%1").arg(b[5][6]));
    ui->bottom_console->appendPlainText(QString("%1").arg(b[5][7]));
    ui->bottom_console->appendPlainText(QString("%1").arg(b[5][8]));
}

void MainWindow::fileCreate()
{
    file.setFileName("./log.txt");
    file.open(QIODevice::WriteOnly | QIODevice::Append);
    file.close();
}

void MainWindow::fileRead2()
{
    int n = 0;
    QString sss[100];
    file.open(QIODevice::ReadOnly);
    QString b[100][18];
    if(file.isOpen())
    {
        QByteArray array;
        while( !file.atEnd())//判断是否读到文件尾
        {
            array = file.readLine(); //按行读,追加
            if(array.length()>300){
                sss[n] = array;
                n++;
            }
        }
        file.close();
    }
    int h = 0;
    int ll = 0;

    int qqq[18][2];

    for(int i = 0;i<n;i++){
        ll = 9;
        for(int q=0;q<sss[i].length();q++){
            // Ks
            if(sss[i][q] == "K"&&sss[i][q+1]=="s"){
                qqq[ll][0] = q + 4;
                qqq[ll][1] = q + 15;
                if(sss[i][q+1]!=" "){
                    qqq[ll][0]++;
                    qqq[ll][1]++;
                }
                for (int j=qqq[ll][0];j<=qqq[ll][1];j++) {
                    b[i][ll][h] = sss[i][j];
                    h++;
                }
                h = 0;
                ll++;
            }
            // n0
            if(sss[i][q] == "n"&&sss[i][q+1]=="0"){
                qqq[ll][0] = q + 4;
                qqq[ll][1] = q + 15;
                if(sss[i][q+1]!=" "){
                    qqq[ll][0]++;
                    qqq[ll][1]++;
                }
                for (int j=qqq[ll][0];j<=qqq[ll][1];j++) {
                    b[i][ll][h] = sss[i][j];
                    h++;
                }
                h = 0;
                ll++;
            }
            // Ta
            if(sss[i][q] == "T"&&sss[i][q+1]=="a"){
                qqq[ll][0] = q + 4;
                qqq[ll][1] = q + 15;
                if(sss[i][q+1]!=" "){
                    qqq[ll][0]++;
                    qqq[ll][1]++;
                }
                for (int j=qqq[ll][0];j<=qqq[ll][1];j++) {
                    b[i][ll][h] = sss[i][j];
                    h++;
                }
                h = 0;
                ll++;
            }
            // E
            if(sss[i][q] == "E"&&sss[i][q+1]==" "){
                qqq[ll][0] = q + 4;
                qqq[ll][1] = q + 15;
                if(sss[i][q+1]!=" "){
                    qqq[ll][0]++;
                    qqq[ll][1]++;
                }
                for (int j=qqq[ll][0];j<=qqq[ll][1];j++) {
                    b[i][ll][h] = sss[i][j];
                    h++;
                }
                h = 0;
                ll++;
            }
            // Pa
            if(sss[i][q] == "P"&&sss[i][q+1]=="a"){
                qqq[ll][0] = q + 4;
                qqq[ll][1] = q + 15;
                if(sss[i][q+1]!=" "){
                    qqq[ll][0]++;
                    qqq[ll][1]++;
                }
                for (int j=qqq[ll][0];j<=qqq[ll][1];j++) {
                    b[i][ll][h] = sss[i][j];
                    h++;
                }
                h = 0;
                ll++;
            }
            // P1
            if(sss[i][q] == "P"&&sss[i][q+1]=="1"){
                qqq[ll][0] = q + 4;
                qqq[ll][1] = q + 15;
                if(sss[i][q+1]!=" "){
                    qqq[ll][0]++;
                    qqq[ll][1]++;
                }
                for (int j=qqq[ll][0];j<=qqq[ll][1];j++) {
                    b[i][ll][h] = sss[i][j];
                    h++;
                }
                h = 0;
                ll++;
            }
            // u
            if(sss[i][q] == "u"&&sss[i][q+1]==" "){
                qqq[ll][0] = q + 4;
                qqq[ll][1] = q + 15;
                if(sss[i][q+1]!=" "){
                    qqq[ll][0]++;
                    qqq[ll][1]++;
                }
                for (int j=qqq[ll][0];j<=qqq[ll][1];j++) {
                    b[i][ll][h] = sss[i][j];
                    h++;
                }
                h = 0;
                ll++;
            }
            // N
            if(sss[i][q] == "N"&&sss[i][q+1]==" "){
                qqq[ll][0] = q + 4;
                qqq[ll][1] = q + 15;
                if(sss[i][q+1]!=" "){
                    qqq[ll][0]++;
                    qqq[ll][1]++;
                }
                for (int j=qqq[ll][0];j<=qqq[ll][1];j++) {
                    b[i][ll][h] = sss[i][j];
                    h++;
                }
                h = 0;
                ll++;
            }
            // model
            if(sss[i][q] == "m"&&sss[i][q+1]=="o"){
                qqq[ll][0] = q + 4 + 4;
                b[i][ll][h] = sss[i][qqq[ll][0]];
                h++;
                h = 0;
                ll++;
            }
        }
    }
    ui->bottom_console->appendPlainText(QString("%1").arg(b[5][9]));
    ui->bottom_console->appendPlainText(QString("%1").arg(b[5][10]));
    ui->bottom_console->appendPlainText(QString("%1").arg(b[5][11]));
    ui->bottom_console->appendPlainText(QString("%1").arg(b[5][12]));
    ui->bottom_console->appendPlainText(QString("%1").arg(b[5][13]));
    ui->bottom_console->appendPlainText(QString("%1").arg(b[5][14]));
    ui->bottom_console->appendPlainText(QString("%1").arg(b[5][15]));
    ui->bottom_console->appendPlainText(QString("%1").arg(b[5][16]));
    ui->bottom_console->appendPlainText(QString("%1").arg(b[5][17]));
}

void MainWindow::fileClear()
{
    file.open(QIODevice::WriteOnly | QIODevice::Truncate);
    if(file.isOpen())
    {
        QByteArray array;
        while( !file.atEnd())//判断是否读到文件尾
        {
            array = file.readLine(); //按行读,追加
        }
        file.close();
    }
}

QString MainWindow::fileWrite(QString msg, QString model)
{
    file.open(QIODevice::WriteOnly | QIODevice::Append);
    if(!file.isOpen())
    {
        return "日志读取失败";
    }
    // 设置输出信息格式
    // QString context_info = QString("File:(%1) Line:(%2)").arg(QString(context.file)).arg(context.line);
    QString current_date_time = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss ");
    QString current_date = QString("(%1)").arg(current_date_time);
   // QString message = QString("%1 %2 %3 %4").arg(text).arg(context_info).arg(msg).arg(current_date);
    QString message = QString("%1 %2: %3").arg(current_date).arg(model).arg(msg);
    // 输出信息至文件中(读写、追加形式)
    QTextStream text_stream(&file);
    text_stream << message << "\r\n";
    file.flush();
    file.close();
}

4.2 读取日志文件,用于检查程序运行情况

这是我运行一次的日志

(2023-03-16 20:46:55 ) Operation: Program startup;
(2023-03-16 20:47:23 ) Operation: Prepare calculation;
(2023-03-16 20:47:23 ) Operation: Calculation-parameters: R = 0.0300000000 L = 0.0480000000 Rb = 0.0303000000 C = 0.0001000000 s = 0.0000000000 Rf = 0.0000000000 tb = 0.0000000000 R0 = 0.0000000000 M = 0.0000000000 Ks = 0.0000000000 n0 = 40000.0000000000 Ta = 298.0000000000 E = 0.4000000000 Pa = 101300.0000000000 P1 = 1.0000000000 u = 0.0000193200 N = 72.0000000000 model = 4.0000000000 ;
(2023-03-16 20:47:23 ) Operation: There is data in the database, no calculation is required;

我现在要读取那些参数,我写了两个函数fileRead1(),fileRead2(),至于为什么写两个函数,因为写一个里面会无法运行,会报错,应该是内存不够了,读取一个参数代码就是下边的,读取出数据,就可以去数据库查数据是否正确了

    int n = 0;
    QString sss[100];
    file.open(QIODevice::ReadOnly);
    QString b[100][18];
    if(file.isOpen())
    {
        QByteArray array;


        while( !file.atEnd())//判断是否读到文件尾
        {
            array = file.readLine(); //按行读,追加
            if(array.length()==397){
                sss[n] = array;
                n++;
            }
        }
        file.close();
    }
    QString current_date_time = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss ");
    QString current_date = QString("(%1)").arg(current_date_time);

    QFile f("./log.txt");
    f.open(QIODevice::WriteOnly | QIODevice::Append);
    QTextStream text_stream(&f);
    text_stream << QString("%1 %2: %3").arg(current_date).arg("Debug").arg("------------") << "\r\n";
    f.flush();

    int h = 0;
    int ll = 0;
    int qqq[18][2];
    for(int i = 0;i<n;i++){
        ll = 0;
        h = 0;
        for(int q=0;q<sss[i].length();q++){
                    if(sss[i][q] == "R"&&sss[i][q+1]==" "){
                qqq[ll][0] = q + 4;
                qqq[ll][1] = q + 15;
                if(sss[i][q+1]!=" "){
                    qqq[ll][0]++;
                    qqq[ll][1]++;
                }
                for (int j=qqq[ll][0];j<=qqq[ll][1];j++) {
                    b[i][ll][h] = sss[i][j];
                    h++;
                }
                h = 0;
                ll++;
            }
        }
  }
}

4.3 检查并修复异常数据

我这个391这个是开始计算得标志,57是结束计算的标志,通过比对文件中的开始和结束的个数,就可以查出上次是否正常存储,

void MainWindow::fileRead()
{
    file.open(QIODevice::ReadOnly);
    QString input;
    // 离奇的很
    if(file.isOpen())
    {
        QByteArray array;
        while( !file.atEnd())//判断是否读到文件尾
        {
            array = file.readLine(); //按行读,追加
            input = array;
            if(array.length()==391){
                startCal++;
            }
            if(array.length()==57){
                endCal++;
            }
        }

        file.close();
    }
}

就根据开始和结束得记录来判端存储情况

    fileRead();
    fileRead1();
    fileRead2();
    try {
        if(startCal==endCal){
            filePrint("程序上次存储正常");
        }
        if((startCal-endCal)==1){
            filePrint("程序上次存储异常,开始修删除错误数据");
            deleteSet(b[startCal][0].toDouble(),b[startCal][1].toDouble(),b[startCal][2].toDouble(),b[startCal][3].toDouble(),b[startCal][4].toDouble(),b[startCal][5].toDouble(),b[startCal][6].toDouble(),b[startCal][7].toDouble(),b[startCal][8].toDouble(),b[startCal][9].toDouble(),b[startCal][10].toDouble(),b[startCal][11].toDouble(),b[startCal][12].toDouble(),b[startCal][13].toDouble(),b[startCal][14].toDouble(),b[startCal][15].toDouble(),b[startCal][16].toDouble(),b[startCal][17].toDouble());
            deleteParam(aaa);
            filePrint("删除完成");

        }
    } catch (int res) {
//        ui->bottom_console->appendPlainText(QString("%1").arg("异常退出"));
    }

这是里面删除用的函数,deleteSet函数是把数据放到InputParameters对象中,里面有一个数据库对象,不需要创建新的,这个多线程使用时可以加上去

void MainWindow::deleteParam(InputParameters &inputParameters)
{
    QSqlQuery query;
    int Id;
    double R,L,Rb,C;
    // 箔片参数
    double s,Rf,tb,R0,M,Ks;
    // 运行参数
    double n0,Ta,E,Pa,P1,u;
    // 网格参数
    int N;
    // 程序选择
    int model;
    R = inputParameters.R;
    L = inputParameters.L;
    Rb = inputParameters.Rb;
    C = inputParameters.C;

    s = inputParameters.s;
    Rf = inputParameters.Rf;
    tb = inputParameters.tb;
    R0 = inputParameters.R0;
    M = inputParameters.M;
    Ks = inputParameters.Ks;

    n0 = inputParameters.n0;
    Ta = inputParameters.Ta;
    E = inputParameters.E;
    Pa = inputParameters.Pa;
    P1 = inputParameters.P1;
    u = inputParameters.u;

    N = inputParameters.N;
    model = inputParameters.model;
    double out_p[74][74];
    double out_h[74][74];
    double out_hf[10][9];

    double out_ff;
    double out_theta;
    query=QSqlQuery(db);
    QString str_1 = QString("SELECT Id FROM inputparameters "
                            "WHERE R = %1 "
                            "AND L = %2 "
                            "AND Rb = %3 "
                            "AND C = %4 "
                            "AND s = %5 "
                            "AND Rf = %6 "
                            "AND tb = %7 "
                            "AND R0 = %8 "
                            "AND M = %9 "
                            "AND Ks = %10 "
                            "AND n0 = %11 "
                            "AND Ta = %12 "
                            "AND E = %13 "
                            "AND Pa = %14 "
                            "AND P1 = %15 "
                            "AND u = %16 "
                            "AND N = %17 "
                            "AND model = %18 ").arg(QString::number(R,'f',10)).arg(QString::number(L,'f',10)).arg(QString::number(Rb,'f',10)).arg(QString::number(C,'f',10))
                                               .arg(QString::number(s,'f',10)).arg(QString::number(Rf,'f',10)).arg(QString::number(tb,'f',10)).arg(QString::number(R0,'f',10)).arg(QString::number(M,'f',10)).arg(QString::number(Ks,'f',10))
                                               .arg(QString::number(n0,'f',10)).arg(QString::number(Ta,'f',10)).arg(QString::number(E,'f',10)).arg(QString::number(Pa,'f',10)).arg(QString::number(P1,'f',10)).arg(QString::number(u,'f',10))
                                               .arg(QString::number(N,'f',10)).arg(QString::number(model,'f',10));
    qDebug() << str_1;
    if(query.exec(str_1)){
        qDebug() << "查询成功";
        query.next();
        inputParameters.Id = query.value(0).toInt();
        Id = inputParameters.Id;
        qDebug() << Id;
    }


//    db = QSqlDatabase::addDatabase("QODBC",QString::number((quint64)QThread::currentThreadId()));
//        db = QSqlDatabase::addDatabase("QMYSQL",QString::number((quint64)QThread::currentThreadId()));
//    db.setHostName("127.0.0.1");
//    db.setPort(3306);
//    db.setDatabaseName("QT");// 不是Database,记得别填错
//    db.setUserName("root");
//    db.setPassword("1234");
//    bool ok = db.open();
//    if (ok){
//         qDebug()<<"thread-successed";
//    }
//    else {
//         qDebug()<<"thread-failed";
//    }

    QString sq_h,sq_p,sq_ff,sq_hf,sq_theta,sq_inputparameters;
    // 中间是需要存储的数据
    query=QSqlQuery(db);

    for (int i=1;i<=10;i++) {
        sq_h=QString("DELETE FROM outh_%1 WHERE Id=%2").arg(i).arg(Id);
        query.exec(sq_h);
        sq_p=QString("DELETE FROM outp_%1 WHERE Id=%2").arg(i).arg(Id);
        query.exec(sq_p);
    }
    sq_inputparameters=QString("DELETE FROM inputparameters WHERE Id=%1").arg(Id);
    query.exec(sq_inputparameters);

    sq_ff=QString("DELETE FROM outff WHERE Id=%1").arg(Id);
    query.exec(sq_ff);

    sq_hf=QString("DELETE FROM outhf WHERE Id=%1").arg(Id);
    query.exec(sq_hf);

    sq_theta=QString("DELETE FROM outtheta WHERE Id=%1").arg(Id);
    query.exec(sq_theta);

//    // 给线程断开连接
//    QString connection;
//    connection = db.connectionName();
//    db.close();
//    db = QSqlDatabase();
    //    db.removeDatabase(connection);

五. 参考

Qt生成log日志文件
Qt学习之基本文件读写QFile
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值