Why are you complicating things so much?

Qt Code:
  1. #include <QtConcurrentMap>
  2. #include <QStringList>
  3. #include <QByteArray>
  4. #include <QFile>
  5.  
  6. struct Decrypter {
  7. Decrypter(const QByteArray &key) : m_key(key) {}
  8.  
  9. typedef QByteArray result_type;
  10.  
  11. QByteArray operator()(const QString &fileName) {
  12. QFile f(fileName);
  13. if(!f.open(QIODevice::ReadOnly)) return QByteArray();
  14. QByteArray result;
  15. result.reserve(f.size());
  16. int keyIndex = 0;
  17. char input;
  18. char keyByte;
  19. while(!f.atEnd()) {
  20. f.getChar(&input);
  21. keyByte = m_key.at(keyIndex);
  22. keyIndex = (keyIndex+1) % m_key.size();
  23. result.append( input ^ keyByte );
  24. }
  25. return result;
  26. }
  27. private:
  28. QByteArray m_key;
  29. };
  30.  
  31. int main() {
  32. QStringList filesToDecrypt = { "file1", "file2", "file3" };
  33. QFuture<QByteArray> future = QtConcurrent::mapped(filesToDecrypt, Decrypter("abcdef"));
  34. return 0;
  35. }
To copy to clipboard, switch view to plain text mode