|
1Qter豆
本帖最后由 rain_sky 于 2018-11-7 14:59 编辑
当我使用多个线程,每个线程里面中都有把一个不同的QJson文件转成XML文件,转换的时间较长,当打开的json文件多于2个时, 程序很卡,并且打印出多个QPainter::begin: Paint device returned engine == 0, type: 3 并直接异常结束。
我的问题是有没有什么办法,可以快速让多个json文件转成xml文件,我是在主线程用QStringList jsonFileName = QFileDialog::getOpenFileNames()打开多个json文件, 根据文件打开的个数来for循环创建线程,在每个线程中转换json文件为xml文件。然后按键出现了显示问题,然后异常退出。
mainwidow.h文件
#define MAXSIZE 5
Work *workThread[MAXSIZE];
mainwidow.cpp文件
void MainWindow:n_OpenChangeBtn_clicked()
{
QStringList jsonFileName = QFileDialog::getOpenFileNames(this, tr("打开Json文件"), "J:\\Desktop\\", "JSON files (*.json)" );
qDebug()<<"---0-----, count of files ="<<jsonFileName.count();
for(int i=0; i<jsonFileName.count(); i++)
{
QFile file(jsonFileName);
QJsonParseError jsonError;
QString fileName = jsonFileName;
if(!fileName.isEmpty() && !fileName.isNull())//file->open(QIODevice::ReadOnly | QIODevice::Text)
{
if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
qDebug()<<tr("open %1 file failed!").arg(fileName);
continue;
}
QByteArray data = file.readAll();
file.close();
QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &jsonError);
if(!jsonDoc.isNull() && jsonError.error == QJsonParseError::NoError){
workThread = new Work(jsonFileName, jsonDoc);
qDebug()<<"123456";
}else{
qDebug()<<"jsonDoc is null or occur error!";
}
}else{
qDebug()<<"fileName is empty or null!";
}
}
}
work.h文件
public:
Work(QString jsfileName, QJsonDocument jsonDoc);
protected:
void run();
private:
QString jsfileName;
QJsonDocument jsonDoc;
QMutex mutex;
work.cpp文件
Work::Work(QString jsfileName, QJsonDocument jsonDoc)
{
mutex.lock();
this->jsfileName = jsfileName;
this->jsonDoc = jsonDoc;
start();
}
void Work::run()
{
//转成xml函数,并保存在另一个文件中
mutex.unlock();
}
|
|