【发布时间】:2014-01-12 17:20:16
【问题描述】:
我正在根据此处给出的堆栈溢出示例创建一个非常简单的 C++ QT 控制台应用程序。
How to use QFileSystemWatcher to monitor a folder for change
代码与该应用程序中的代码完全相同,我正在使用 Qt 的 UI、带有 MinGW 32 位的 Qt Creator 进行开发。我从可以选择的项目中选择了控制台应用程序,因为我不需要图形用户界面。应用程序完成加载后,应用程序会显示错误消息“警告:未在 main() 线程中创建 QApplication”,然后什么也不做。
我已尝试调试应用程序,但没有遇到断点,我认为在编辑器中无法进行调试。
我快速将 QApplication 更改为 QCoreApplication,因为我正在开发控制台应用程序,但收到完全相同的错误消息。
文件系统接收器.h
#ifndef FILESYSTEMRECEIVER_H
#define FILESYSTEMRECEIVER_H
#include <iostream>
using namespace std;
#include <QtCore/QApplication>
#include <QtCore/QFileSystemWatcher>
#include <QtCore/QDebug>
#include <QtWidgets/QWidget>
#include <QtWidgets/QMessageBox>
class MyClass : public QWidget
{
Q_OBJECT
public:
MyClass(QWidget* parent=0)
:QWidget(parent){}
~MyClass() {}
public slots:
void showModified(const QString& str)
{
Q_UNUSED(str)
cout << "A message has been received!" << endl;
//QMessageBox::information(this,"Directory Modified", "Your Directory is modified");
}
};
#endif // FILESYSTEMRECEIVER_H
main.cpp
#include <iostream>
using namespace std;
#include <QtCore/QApplication>
#include <QtCore/QFileSystemWatcher>
#include <QtCore/QDebug>
#include <QtWidgets/QWidget>
#include <QtWidgets/QMessageBox>
#include "fileSystemReceiver.h"
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
QFileSystemWatcher watcher;
watcher.addPath("C:/QtTest");
QStringList directoryList = watcher.directories();
Q_FOREACH(QString directory, directoryList)
qDebug() << "Directory name" << directory <<"\n";
MyClass* mc = new MyClass;
QObject::connect(&watcher, SIGNAL(directoryChanged(QString)), mc, SLOT(showModified(QString)));
return app.exec();
}
我的 pro 文件如下所示:
QT += core
QT += widgets
QT -= gui
TARGET = fsw
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
HEADERS += fileSystemReceiver.h
SOURCES += \
main.cpp
【问题讨论】:
-
因为没有代码所以不清楚你在问什么
-
代码在链接中。
-
关于 Qt 的一个不明显的事情是,您需要在执行任何其他操作之前创建一个 QApplication 对象,即使您不直接访问此对象。听起来这就是您的代码中缺少的内容。
-
这就是代码显然所做的,我将尝试使 QApplication 全局化,看看是否会有所作为。 - 不
-
问题需要独立。将您的代码放在这里并删除链接。
标签: c++ qt qt-creator qmake qtgui