2015-04-09 4 views
6

Per farla breve ho un programma che utilizza la classe QDomDocument per creare un file xml e quindi utilizza la funzione save() per salvarlo in un oggetto di flusso di testo. Quindi, in pratica la suaCome utilizzare QProgressDialog con funzione di salvataggio QDomDocument

QDomDocument somedoc; 

//create the xml file, elements, etc. 


QFile io(fileName); 
QTextStream out(&io); 
doc.save(out,4); 
io.close(); 

voglio essere in grado di mostrare l'avanzamento del salvataggio utilizzando la classe QProgressDialog, ma sto attraversando un periodo difficile capire che fuori. C'è un modo che posso controllare in modo incrementale per vedere se il file è in fase di elaborazione e basta aggiornare i progressi? Eventuali suggerimenti? Grazie.

risposta

3

In primo luogo, ho pensato che possiamo trovare la risposta nel codice sorgente Qt, ma non è stato così semplice, quindi ho trovato una soluzione più semplice, basta usare il metodo toString() e scriverlo come al solito. Per esempio:

QStringList all = doc.toString(4).split('\n');//4 is intent 
int numFiles = all.size(); 
QProgressDialog *progress = new QProgressDialog("Copying files...", "Abort Copy", 0, numFiles, this); 
progress->setWindowModality(Qt::WindowModal); 

QFile file("path"); 
file.open(QIODevice::WriteOnly); 

progress->show(); 
QTextStream stream(&file); 
for (int i = 0; i < numFiles; i++) { 
    progress->setValue(i); 
    if (progress->wasCanceled()) 
     break; 
    stream << all.at(i) << '\n'; 

    QThread::sleep(1);//remove these lines in release, it is just example to show the process 
    QCoreApplication::processEvents(); 
} 
progress->setValue(numFiles); 
file.close(); 

Se si vuole guardare il codice sorgente del QDomDocument::save(), lo si può trovare in

qt-everywhere-opensource-src-5.4.1.zip \ qt-ovunque -opensource-src-5.4.1 \ qtbase \ src \ xml \ dom

or just on the GitHub.

+0

Thank you so much! Questa era la soluzione perfetta. – inspiration

Problemi correlati