Я создаю очень простое консольное приложение C++ QT из приведенного здесь примера при переполнении стека.Приложение Qt-консоли «ПРЕДУПРЕЖДЕНИЕ: QApplication не был создан в потоке main()»
How to use QFileSystemWatcher to monitor a folder for change
код точно так, как код в этом приложении, и я разрабатываю с UI в Qt, Qt Creator с MinGW 32bit. Я выбрал консольное приложение из проектов, которые я мог выбрать, поскольку мне не нужен графический интерфейс пользователя. После завершения загрузки приложения приложение отображает сообщение об ошибке «ПРЕДУПРЕЖДЕНИЕ: QApplication не был создан в потоке main()», а затем ничего не делает.
Я пробовал отлаживать приложение, но не получаю никаких точек останова, я не думаю, что отладка работает в редакторе.
Я быстро перешел и изменил QApplication на QCoreApplication, поскольку я разрабатываю консольное приложение, но получаю то же сообщение об ошибке.
filesystemreceiver.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();
}
Моя про файл выглядит следующим образом:
QT += core
QT += widgets
QT -= gui
TARGET = fsw
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
HEADERS += fileSystemReceiver.h
SOURCES += \
main.cpp
Пока неясно, что вы просите, потому что нет никакого кода –
код находится в ссылке. – ceorron
Непонятная вещь о Qt заключается в том, что вам нужно создать объект QApplication, прежде чем делать что-либо еще, даже если вы не получили доступ к этому объекту напрямую. Похоже, это то, чего не хватает в вашем коде. –