2017-03-16 131 views
0

我有一個類用於將文件壓縮爲不同的格式。我試圖使用QtConcurrent在後臺運行壓縮。有了這個,我有兩個功能:QT Qt與重載的類函數一起運行

  1. 注意到文件路徑爲一個字符串,壓縮格式
  2. 注意到的文件路徑矢量和壓縮格式

問題是我得到的問題與QtConcurrent不知道使用哪個重載函數。我讀了this stackoverflow,其中顯示使用static_cast明確指出要使用哪種方法。雖然我的函數是類函數而不是靜態方法,但我仍然被語法卡住了。我可以使用static_cast來考慮這些不是靜態方法嗎?

我如何我打電話運行:

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

報頭壓縮類

class CompressFile : public QObject 
{ 
    Q_OBJECT 
public: 

... 

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

... 
} 

如果我刪除的壓縮功能之一是編譯,所以我知道我已經收窄我的問題歸結於此。

FileCompressor.cpp:100:74:注:類型 'T(類::)(參數1,參數2,參數3,Param4,Param5)常量' 和「布爾(CompressFile ::)(QString的,CompressFormat) 「有不兼容的CV-預選賽 FileCompressor.cpp:100:74:注意:不能從重載函數解析地址」 & CompressFile ::壓縮

+1

你*應該*能夠使用'static_cast'。嘗試'QtConcurrent :: run(&compressor,static_cast ,CompressFormat)>(&CompressFile :: compress),files,format)''。 –

+0

工作正常!我的語法很好,謝謝。如果你做了這個帖子,我會將其標記爲答案。 –

回答

1

按照註釋,你可以使用一個static_cast之間的歧義各種過載...

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