1

毎秒 .txt ファイルから読み取り、別のクラスの新しいオブジェクトを作成する関数を通知する QTimer オブジェクトを実装しました。私の問題は、関数を 1 つのオブジェクトのみを作成するように制限し、変更がないか .txt ファイルをチェックし続けることです。これはどのように行うことができますか?

以下は毎秒実行されるコードです

void PutMeDown::signalReceived()
{

    char buffer;
    char currentState;
    char prevState = '0';

    int fd = open("/home/stud/test", O_RDWR, 0666);

    if(fd < 0)
        cout << "can't open file" << endl;
    else
        read(fd, &buffer, 1);//read from file

    currentState = buffer;

    if(currentState == prevState)
    {

        drive = new Drive(this);
        drive->setWindowFlags(Qt::Window | Qt::FramelessWindowHint);
        drive->show();
        this->hide();

    }

    close(fd);
}
4

1 に答える 1

3

Qt~には特別授業がありQFileSystemWatcherます。このクラスは、ファイルが変更されたことを通知できます (fileChangedシグナル)。

QFileSystemWatcher * watcher = new QFileSystemWatcher(this);
watcher->addPath(mFileName);
connect(watcher,SIGNAL(fileChanged(QString)),SLOT(slot(QString)));

スロットでは、ファイルを読み取ったり、他のことをしたりできます。このクラスではQTimer、を使用する必要はありません。ファイルを毎秒チェックするよりも優れています。

1 つのオブジェクトに関する質問に戻ります。最も簡単な解決策は、追加の変数を提供boolし、スロットでこの変数をチェックして、新しいオブジェクトを作成するかどうかです。この変数を「外部」で変更する方法を提供することもできます。これにより、必要なときにオブジェクトが作成されます。

non-Qtまた、ファイルの読み取りにアプローチを使用していることがわかります。QFileQtにも特別なクラスがあります。確認してください。おそらく、あなたのタスクでは を使用できます。QFile

于 2014-11-06T19:20:56.033 に答える