c++ - 关闭主窗口时在无限循环中停止 qt 应用程序
问题描述
我的主要应用程序类是USB_Packet_Analyzer
处理一些文件,但也支持从某人仍在写入的文件中读取。在这种情况下,我有一个无限循环来检查该文件中是否写入了新内容,如果是,我继续处理。在我调用的循环的每次迭代中QCoreApplication::processEvents();
。问题是当我关闭应用程序的主窗口时,它不会停止应用程序。如果我检查QApplication::topLevelWidgets().size()
它仍然是1,并且QApplication::topLevelWidgets().at(0)->isVisible()
是假的。为什么它不关闭我的窗口?我可以连接一些信号来检测窗口上的红十字是否被点击?我知道当进入这种循环时我可能会使用QThread
,但我不想参与其中。我的问题有什么解决办法吗?
解决方案
看一下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;
}
}
推荐阅读
- java - 使用广播接收器在唯一时间发送唯一通知
- c++ - C++ OpenGL wrapper:接口类似固定管线,可以导出.collada
- node.js - 从长时间运行的 aws lambda 函数同步获取响应
- node.js - Windows 上 Electron 中的 dialog.showOpenDialog 有问题吗?
- image - 无法让我的 html 图像以我想要的方式显示和定位
- django - 我在 Django 模型类中定义了常量。如何访问模板中的常量?
- java - 无法解析 com.google.android.gms:play-services-ads:19.1.0
- python - 如何从 cmd.exe 运行 python3
- compression - 存储LZW算法的输出代码
- amazon-web-services - 何时使用 EBS 快照与 AMI 映像