首页 > 解决方案 > 关闭主窗口时在无限循环中停止 qt 应用程序

问题描述

我的主要应用程序类是USB_Packet_Analyzer处理一些文件,但也支持从某人仍在写入的文件中读取。在这种情况下,我有一个无限循环来检查该文件中是否写入了新内容,如果是,我继续处理。在我调用的循环的每次迭代中QCoreApplication::processEvents();。问题是当我关闭应用程序的主窗口时,它不会停止应用程序。如果我检查QApplication::topLevelWidgets().size()它仍然是1,并且QApplication::topLevelWidgets().at(0)->isVisible()是假的。为什么它不关闭我的窗口?我可以连接一些信号来检测窗口上的红十字是否被点击?我知道当进入这种循环时我可能会使用QThread,但我不想参与其中。我的问题有什么解决办法吗?

标签: c++qtinfinite-loop

解决方案


看一下QFileSystemWatcher类及其fileChanged信号。

#include <QFileSystemWatcher>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);

private:
    QFileSystemWatcher* fileWatcher;
    Ui::MainWindow*ui;
};

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent)
{
    createUi();
            
    fileWatcher = new QFileSystemWatcher(this);
    connect(fileWatcher, SIGNAL(fileChanged(QString)), this, SLOT(fileChangedSlot(QString)));
            
    QFileInfo file("file_to_watch.txt");
        
    if (file.exists())
    {
        fileWatcher->addPath(file.absoluteFilePath());
    }
}
        
void MainWindow::fileChangedSlot(const QString &path)
{
    if (fileWatcher->files().contains(path))
    {
        qDebug() << "File changed" << path;
    }
}

推荐阅读