2015-04-09 3 views
6

Aby uzyskać długą historię, mam program, który używa klasy QDomDocument do utworzenia pliku xml, a następnie używa funkcji save(), aby zapisać ją w obiekcie strumienia tekstowego. Więc w zasadzie jegoSposób korzystania z QProgressDialog wraz z funkcją składowania QDomDocument

QDomDocument somedoc; 

//create the xml file, elements, etc. 


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

Chcę być w stanie pokazać postęp ustawiony przy użyciu klasy QProgressDialog, ale mam trudności ze zorientowaniem go. Czy istnieje sposób, w jaki mogę stopniowo sprawdzić, czy plik jest przetwarzany i po prostu aktualizować postęp? Jakieś sugestie? Dzięki.

Odpowiedz

3

Po pierwsze, pomyślałem, że możemy znaleźć odpowiedź w kodzie źródłowym Qt, ale nie było to takie proste, więc znalazłem łatwiejsze rozwiązanie, wystarczy użyć metody toString() i napisać jak zwykle plik. Na przykład:

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(); 

Jeśli chcesz spojrzeć na kod źródłowy QDomDocument::save(), można go znaleźć w

qt-everywhere-opensource-src-5.4.1.zip \ qt-wszędzie -opensource-src-5.4.1 \ qtbase \ src \ xml \ dom

or just on the GitHub.

+0

Dziękuję bardzo! To było idealne rozwiązanie. – inspiration