2015-01-01 28 views
0

我想随机将数据写入许多不同的文件,所以我将QFile *存储到Qhash,但它的接缝不起作用。并有一个报告如何在Qhash中存储Qfile

QObject :: connect:没有这样的信号QObject :: aboutToClose()在.... \ include \ QtCore \ 5.3.2 \ QtCore/private /../../。 ./../../src/corelib/io/qtextstream_p.h:75

你能帮我解决这个问题吗?

这是一个测试代码来实现我的想法。

#include <QHash> 
#include <QString> 
#include <QFile> 
#include <QTextStream> 
#include <QFile> 
#include <QDebug> 

int main(int argc, char *argv[]) 
{ 
QHash <qint32,QFile *> fileHandHash; 
for(qint32 i=0; i<1000; i++){ 
qint32 id = i % 10; 
qDebug() << i << "\t" << id; 

if(! fileHandHash.contains(id)){ 
QString filename = id + ".out.txt"; 
QFile MYFILE(filename); 
MYFILE.open(QIODevice::WriteOnly); 
fileHandHash.insert(id,&MYFILE); 
} 

QTextStream OUT(fileHandHash.value(id)); 
OUT << i << "\n"; 
} 
return 1; 
} 
+3

你正在向插入指针传递一个局部变量,然后立即被销毁。这永远不会结束。 –

回答

0

正如在评论中所说的,你不能存储指向局部变量的指针。然而这可能或多或少是你要找的东西:

#include <QHash> 
#include <QString> 
#include <QFile> 
#include <QTextStream> 
#include <QFile> 
#include <QDebug> 

int main(int argc, char* argv[]) 
{ 
    QHash <qint32, QFile*> fileHandHash; 

    for (qint32 i = 0; i < 1000; i++) { 
     qint32 id = i%10; 
     qDebug() << i << "\t" << id; 

     if(!fileHandHash.contains(id)) { 
     QString filename = QString("%1.out.txt").arg(id); 
     QFile* myfile = new QFile(filename); 
     myfile->open(QIODevice::WriteOnly); 
     fileHandHash.insert(id, myfile); 
     } 

     QTextStream out(fileHandHash.value(id)); 
     out << i << "\n"; 
    } 

    qDeleteAll(fileHandHash); 
    fileHandHash.clear(); 

    return 1; 
} 

注意文件描述符的数量。做这个每个文件在散列中都会有一个开放的描述符。