C++ QCoreApplication未正确退出
我想在我的MFC DLL中使用QtXML。我想使用它来QXmlQuery选择xml文件中的节点。 我创建了一个这样的标题。问题是,如果我在for循环中调用select方法,程序会在第二次迭代中由于访问冲突而崩溃。出现问题的原因是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>
#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所指出的,如果这是代码中的所有逻辑,那么您甚至不需要事件。