Qt控制台应用程序"WARNING: QApplication was not created in the main() thread"
Qt console application "WARNING: QApplication was not created in the main() thread"
我正在根据这里给出的堆栈溢出示例创建一个非常简单的C++QT控制台应用程序。
如何使用QFileSystemWatcher监控文件夹的更改
该代码与该应用程序中的代码完全相同,我正在使用Qt的UI进行开发,Qt Creator使用MinGW 32位。我从我可以选择的项目中选择了控制台应用程序,因为我不需要图形用户界面。一旦应用程序完成加载,应用程序就会显示错误消息"WARNING:QApplication not created in the main()thread",然后什么也不做。
我试过调试应用程序,但没有遇到断点,我认为调试在编辑器中不起作用。
我很快就把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();
}
我的专业文件如下:
QT += core
QT += widgets
QT -= gui
TARGET = fsw
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
HEADERS += fileSystemReceiver.h
SOURCES +=
main.cpp
您在项目中遇到了几个问题:
-
QCore本应显示QWidget 的程序中的应用程序
-
调用main.cpp源文件main.moc。这表明您不太了解moc是如何工作的以及它是关于什么的。
-
Qt程序中的cout,而不是QTextStream或qDebug()。
-
源代码中的Q_FOREACH不被其他应用程序重用,因此通常不会发生冲突。你应该简单地使用"foreach"。
-
在使用foreach迭代时,您并没有对字符串使用const引用,即使您似乎只是在读取它,而不是在修改它。
-
这里有一个硬编码的路径,而不是一个分隔良好的常量字符串:
watcher.addPath("C:/QtTest");
-
您正在将
widgets
添加到CONFIG变量中,但删除了gui
。 -
当默认情况下CONFIG变量存在时,您正在将`core添加到CONFIG变量中。
-
您包含
#include <QtWidgets/QFoo>
而不是#include <QFoo>
,以保留使用Qt4构建的选项,并且通常使用明确的构建系统包含路径。 -
您正在为非基于控制台的应用程序添加
CONFIG += console
。 -
您正在为非基于控制台的应用程序添加
CONFIG -= app_bundle
。 -
SOURCES变量使用反斜杠,但HEADERS不使用反斜杠。这是不体贴的。
-
您可以在堆上创建一个MyClass实例,而不是在堆栈上创建,这样做对您来说更简单,因为它已经由事件循环适当地保护,以便在预期范围内保持有效。
最重要的是,根据评论讨论,您的问题似乎与qDebug()有关。您应该按照下面的文档来正确设置QtCreator进行调试。
设置调试器
- 如何理解"Temporary objs are destroyed as the last step in evaluating the full-expression"?谁能用一些简单的例子来说明这
- 为什么'allocate in one library and free in the other'是错误的
- 如何修复此错误"the value of 'x1' is not usable in a constant expression"?static_assert
- 如何修复'The procedure entry point SDL_RWclose could not be located in the dynamic link library'
- 错误:在 MacOS 上"no member named 'uint8_t' in the global namespace"
- "The ordinal 344 could not be located in the dynamic link library"
- 是否有内置函数返回" the number of true value in a boolean vector "?
- 如何从类调用函数 - 错误"was not in the scope"
- 在单线程中使用 asio::async_write 时获得"the requested resource is in use"
- 了解C++代码 - "Get the number of digits in an int"
- "the procedure entry point _ZNSt8_detail15_List_node_base7_M_hookEPS0_ could not be located in the
- 如何修复理性狂想曲错误:"Current value is " VC11 ", but no Visual Studio installation was not found in the direc
- Qt控制台应用程序"WARNING: QApplication was not created in the main() thread"
- 应对"Find the first repeated character in a string"挑战的最紧凑、高效、可读和智能的解决方案
- 为什么我会得到"end of file found before the left brace '{' in hashtable.h(8)"?
- 在win2k3上运行.exe时发生"The procedure entry point GetErrorMode could not be located in the dynamic link l
- 我正在开发Arduino Uno。错误:开关外壳的"'RX' not declared in the scope."和"duplicate case value"
- 告诉海湾合作委员会"I want to use SSE4.1, but ONLY in the places I want!"
- COM in the non-Windows world?
- The priority_queue of STL in c++