2017-06-14 66 views
3

調用一個方法如何通過函數指針調用方法?

正常方式:

QMetaObject::invokeMethod(obj, "function"); 

而是採用string.This就是我想要的,但:

QMetaObject::invokeMethod(obj, function()); 
// or any macro like SLOT 
QMetaObject::invokeMethod(obj, FUNC_NAME(function())); 
+0

爲什麼使用'QMetaObject :: invokeMethod'直接調用'obj.func()'方法? – putu

+0

@putu例如,在不同的線程中調用一個方法。 – Jiu

+0

具體而言,在[本答案](https://stackoverflow.com/a/21653558/1329652)中查找「TL; DR for methods/slots」 –

回答

0

強烈建議您使用正常的方式,即使用QMetaObject::invokeMethod(obj, "function")。但是,如果你願意,你可以使用下面的字符串化宏:

#define FUNC_NAME(a)   (QString(#a).remove(QRegExp("\\((.*)\\)")).trimmed().toLatin1().constData()) 

//usage 
QMetaObject::invokeMethod(obj, FUNC_NAME(function())); 

上面的宏轉換參數字符串,然後取出(...)之間的方法/函數的參數。