2015-01-01 30 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; 
} 

注意文件描述符的數量。做這個每個文件在散列中都會有一個開放的描述符。