0

我正在制作一个 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 的类型。

4

1 回答 1

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");
于 2017-01-04T07:28:55.210 回答