C++ QCoreApplication未正确退出

C++ QCoreApplication未正确退出,c++,qt,mfc,C++,Qt,Mfc,我想在我的MFC DLL中使用QtXML。我想使用它来QXmlQuery选择xml文件中的节点。 我创建了一个这样的标题。问题是,如果我在for循环中调用select方法,程序会在第二次迭代中由于访问冲突而崩溃。出现问题的原因是QCoreApplication没有正确退出。我该怎么办 #define NOMINMAX #pragma once #include <windows.h> #include <vector> #include <iostream>

我想在我的MFC DLL中使用QtXML。我想使用它来QXmlQuery选择xml文件中的节点。 我创建了一个这样的标题。问题是,如果我在for循环中调用select方法,程序会在第二次迭代中由于访问冲突而崩溃。出现问题的原因是QCoreApplication没有正确退出。我该怎么办

#define NOMINMAX 

#pragma once
#include <windows.h>
#include <vector>
#include <iostream>
#include <string>

#include <QtCore/QObject>
#include <QtCore/QFile>
#include <QtXml/QDomDocument>
#include <QtXml/QDomElement>
#include <QtCore/QCoreApplication>
#include <QtXmlPatterns/QXmlQuery>
#include <QtCore/QBuffer>
#include <QtXmlPatterns/QXmlSerializer>
#include <QtCore/QTimer>
#include <QtWidgets/QApplication>
#include "Utilities.h"
#include "GeneralConfigs.h"

namespace DBMS_ENGINE{
class SelectEngine: public QObject
{
    Q_OBJECT
public:
    explicit SelectEngine();
    DWORD DBMS_ENGINE::SelectEngine::Select(QString tablePath){
        DWORD result=0;
        using namespace std;
        int argc=1;
        char *argv[]={"1","2"};
        QTimer t;
        a=new QCoreApplication(argc,argv);
        connect(a,SIGNAL(a->aboutToQuit()),a,SLOT(quit()));
        QFile sourceDocument;
        sourceDocument.setFileName(tablePath);
        sourceDocument.open(QIODevice::ReadOnly);
        QByteArray outArray;
        QBuffer buffer(&outArray);
        buffer.open(QIODevice::ReadWrite);
        QXmlQuery query;
        query.bindVariable("inputDocument", &sourceDocument);
        QString QueryString;
        QueryString=QString("declare variable $inputDocument external; \n             doc($inputDocument)/root/key");
        query.setQuery(QueryString);
        QString result1;
        query.evaluateTo(&result1);

    }//end of methos
    private:
    QCoreApplication *a;
    private slots:
        void quit(){
            QCoreApplication::quit();
            a->exit();
            qApp->quit();
            QCoreApplication::exit();

        }//end of method
};//end of class
}//end of namespace

请把缩进的部分修好。连接a,信号a->aboutToQuit,a,SLOTquit;`->你为什么有这个?另外,您能详细说明一下这个用例吗?使用QXmlStreamReader有什么问题?连接a,信号a->aboutToQuit,a,SLOTquit;这是错误的,很可能会导致堆栈溢出,因为quit将导致发出aboutToQuit,它连接到quit。。。另外,您确定需要QCoreApplication吗?用例是读取简单XML文件中的节点并找到具有特殊条件的节点。我发现不用编写完整的源代码,我可以使用Xpath,我可以使用的框架之一是Qt。我写的代码没有qcore应用程序。程序无法正常工作,因为事件循环未启动。您可以对该行进行注释并查看它。这是因为我的DLL的起点在MFC中。connecta,SIGNALa->aboutToQuit,a,SLOT这一行是我最后一次测试。我还测试了connectqApp,SIGNALqApp->aboutToQuit,this,slotquiit,但什么也没发生。正如您所看到的,我在quit方法中尝试了几种类型的quit核心应用程序。但它们都不能正常工作。在第二次迭代中,由于QXmlQuery中使用的QMutextLocker,程序因访问冲突而崩溃。我认为该锁没有正确删除1请修复缩进。这是帮助他人为您提供帮助的切入点。2看一看。3您可以使用QCoreApplication::quit;,但是正如Frank所指出的,如果这是代码中的所有逻辑,那么您甚至不需要事件。