2017-03-16 2 views
0

J'ai une classe que j'utilise pour compresser des fichiers dans différents formats. J'essaie d'utiliser QtConcurrent pour exécuter la compression en arrière-plan. Avec cela, j'ai deux fonctions:QT QtConcurrent run avec fonction de classe surchargée

  1. prend le chemin du fichier sous forme de chaîne et le format de compression
  2. Prend un vecteur de chemins de fichiers et le format de compression

Problème est que je reçois des problèmes avec QtConcurrent pas sachant quelle fonction surchargée utiliser. J'ai lu this stackoverflow qui a montré en utilisant static_cast pour indiquer explicitement quelle méthode utiliser. Je suis coincé avec la syntaxe puisque mes fonctions sont des fonctions de classe et non des méthodes statiques. Puis-je même utiliser static_cast pour cela, étant donné que ce ne sont pas des méthodes statiques?

Comment j'appelle courir:

CompressFile compressor(&m_sysLog); 
QVector<QString> files;  
CompressFormat format((CompressFormat)pMsgCast->get_format()); 
QtConcurrent::run(&compressor, &CompressFile::compress, files, format); 

tête pour la classe de compression

class CompressFile : public QObject 
{ 
    Q_OBJECT 
public: 

... 

bool compress(QString strFileName, CompressFormat format);    
bool compress(QVector<QString> strFileList, CompressFormat format); 

... 
} 

Si je supprime une des fonctions de la compriment compile donc je sais que je l'ai réduit mon problème à ceci.

FileCompressor.cpp: 100: 74: Note: les types de T (classe ::) (Param1, Param2, Param3, Param4, Param5) const 'et « bool (CompressFile ::) (QString, CompressFormat) « ont cv-qualifiés incompatibles FileCompressor.cpp: 100: 74: noter: ne pouvait pas résoudre l'adresse de fonction surchargée » & CompressFile :: compress'

+1

Vous * devriez * pouvoir utiliser 'static_cast'. Essayez 'QtConcurrent :: run (& compresseur, static_cast , CompressFormat)> (& CompressFile :: compress), fichiers, format)'. –

+0

Cela a fonctionné! Ma syntaxe était loin, merci. Si vous faites un post, je le marquerai comme la réponse. –

Répondre

1

Selon le commentaire, vous pouvez utiliser un static_cast pour désambiguïser entre les diverses surcharges ...

QtConcurrent::run(&compressor, 
        static_cast<bool(CompressFile::*)(QVector<QString>, CompressFormat)>(&CompressFile::compress), 
        files, 
        format);