2017-06-14 1 views
3

関数ポインタを使ってメソッドを呼び出す方法は?方法</p> <p>通常の方法で起動

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

しかし、その代わりstring.Thisを使用したのは、私が欲しいものです:

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

'QMetaObject :: invokeMethod' isteadを使って、' obj.func() 'で直接メソッドを呼び出すのはなぜですか? – putu

+0

@putuたとえば、別のスレッドでメソッドを呼び出します。 – Jiu

+0

具体的には、[この回答](https://stackoverflow.com/a/21653558/1329652)では、「メソッド/スロット用のTL; DR」 –

答えて

0

私は強くは、通常の方法を使用することをお勧めいたします、すなわちQMetaObject::invokeMethod(obj, "function")を使用します。文字列に上記のマクロ変換引数が、その後(...)間のメソッド/関数の引数を削除

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

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

:しかし、あなたがしたい場合は、以下の文字列化マクロを使用することができます。

関連する問題