我從這裏給出的一個堆棧溢出的例子中創建了一個非常簡單的C++ QT控制檯應用程序。Qt控制檯應用程序「警告:QApplication沒有在main()線程中創建」
How to use QFileSystemWatcher to monitor a folder for change
的代碼是完全一樣的在應用程序的代碼,我用Qt的用戶界面,Qt Creator的使用MinGW 32位發展。我從我可以選擇的項目中選擇控制檯應用程序,因爲我不需要圖形用戶界面。應用程序加載完成後,應用程序將顯示錯誤消息「警告: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對象。聽起來這就是你的代碼中缺少的東西。 –