如何使用Qt制作文本文件

时间:2017-01-04 05:28:27

标签: qt logging qtextstream

我正在创建一个GUI应用程序,用户在其中插入一些信息并单击“添加”按钮以添加更多信息,或单击“完成”按钮以完成该过程。 该过程的输出将是4个文本文件。所以,我创建了一个包含4个函数的类,每个函数都创建了一个这样的文件:

class RequiredFilesMaker
{
public:
    RequiredFilesMaker();
    ~RequiredFilesMaker();
    void a1(float xcor, float ycor, int xnbin, int ynbin , int resolution);
    void a2();
    void a3();
    void a4();
};

由于我最初的研究,我知道我应该使用QTextStream将数据保存到文件中。但是,使用这些方便的对象存在问题。我无法在类中定义它们并在构造函数中初始化它们。我检查了所有的文件和论坛,看看其他人做了什么。但是,我发现广泛使用的唯一方法是在函数内调用对象并在完成工作后关闭数据文件(这不是我最喜欢的,因为我需要保持文件打开以供用户编写在它上面。)

QFile data("output.txt");
if (data.open(QFile::WriteOnly | QFile::Truncate)) {
    QTextStream out(&data);
    out << "Result: " << qSetFieldWidth(10) << left << 3.14 << 2.7;
    // writes "Result: 3.14      2.7       "
}

有谁知道如何解决这个问题?我提出了一个新的想法,即将所有信息保存在另一个变量(MyMagic)中,并调用类似的函数:

void RequiredFilesMaker::a1(float b1, float b2, int b3, int b4, int b5){
    QFile gs_qfile("abc.dat");
    if (!gs_qfile.open(QIODevice::WriteOnly)){
        qDebug() <<"Couldn't open the file";
        return;
    }
    QDataStream out(&gs_qfile);
    out.setVersion(QDataStream::Qt_4_7);
    out << MyMagic;

    gs_qfile.flush();
    gs_qfile.close();

但是,我想知道MyMagic的类型。

1 个答案:

答案 0 :(得分:0)

您需要一个在所有类中共享的单例类,并管理所有日志记录操作。

class singletonclass{

public:
    singletonclass(){
        // Opening log file and ...
    }

    static singletonclass * getInstance(){
        static singletonclass * instance;
        if(!instance)
            instance = new singletonclass();
        return instance;
    }

    void doLog(QString log){
        // do logging
    }
}

您可以在应用程序中使用get instance方法来提供全局类实例:

singletonclass::getInstance()->doLog("Salam");