Qt控制台应用程序"WARNING: QApplication was not created in the main() thread"

Qt console application "WARNING: QApplication was not created in the main() thread"

本文关键字:the in main created thread was 应用程序 控制台 WARNING Qt QApplication      更新时间:2023-10-16

我正在根据这里给出的堆栈溢出示例创建一个非常简单的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进行调试。

设置调试器

相关文章: