ich hatte gestern das Problem, dass ich gerne doe Zeiten von einer Liste von Audiodateien anzeigen wollte. Dies habe ich in diesem Link http://qtforum.de/forum/viewtopic.php?t=12591 gelöst.
Nun ist aber das Problem, das diese Lösung nun die GUI blockert und ich das deshalb gerne in einen Thread auslagern will.
Hier nun meine Idee dazu:
Ich würde gerne dem Thread eine QStringList mit den Audiodateinamen übergeben und eine QListe mit den Endzeiten zurückbekommen.
Dazu würde ich gerne weiterhin meine jetzige Struktur komplett in einen QThread auslagern.
Geht das überhaupt, und was muss ich dabei beachten.
Hier meine jetzigen Funktionen:
Code: Alles auswählen
void main::slotOpenMultiAudio(){
if (configValues.isFileLoadedSuccessfully()) {
do{
AudiofileNameList = QFileDialog::getOpenFileNames(this, tr("Open Audio File"),XmlFilePath,tr("Audio Files (*.wav *.mp3)"));
}while(AudiofileNameList.isEmpty());
foreach (QString string, AudiofileNameList) {
Phonon::MediaSource source(string);
sources.append(source);
QTime nullTime;
nullTime.setHMS(0,0,0,0);
endtimeSplittFiles.append(nullTime);
}
if (!sources.isEmpty()){
metaInformationResolver->setCurrentSource(sources.at(0));
}
}
Code: Alles auswählen
void main::metaStateChanged(Phonon::State newState, Phonon::State oldState){
//get index of actual audio-file, when StoppenState is entered (a.k.a. ready to play):
if(newState == Phonon::StoppedState){
int index = sources.indexOf(metaInformationResolver->currentSource()) +1;
//get end time of actual audiotime:
qint64 time64 = metaInformationResolver->totalTime();
endtimeSplittFiles[index-1] = QTime::QTime((time64 / 3600000) % 60, (time64 / 60000) % 60, (time64 / 1000) % 60, (time64 % 1000));
if (index < sources.size()) {
metaInformationResolver->setCurrentSource(sources.at(index));
}
/// test, if Endtime-Array is filled!
QTime nullTime;
nullTime.setHMS(0,0,0,0);
if(!endtimeSplittFiles.contains(nullTime)){
qDebug() << "alles gefüllt";
qDebug() << endtimeSplittFiles;
emit(endtimeReady(endtimeSplittFiles));
}
}
}