使用invokeMethod映射执行一个受保护的函数
class MyInvoke : public QWidget
{
Q_OBJECT
public:
explicit MyInvoke(){}
~MyInvoke(){}
void fun1(QString funname){
int num = 10;
bool returnValue = false;
bool res = true;
res = QMetaObject::invokeMethod(this, funname.toStdString().c_str(),
Qt::DirectConnection, Q_RETURN_ARG(bool, returnValue),
Q_ARG(int, num));
if(!res)
{
qDebug() << "invoke fail.";
}else{
qDebug() << "invoke succed." << returnValue;
}
}
protected:
Q_INVOKABLE bool MyInvokeTest(int num){
qDebug() << "hello invoke." << num;
return 1;
}
};
调用
MyInvoke m;
m.fun1("MyInvokeTest");
/**print result
hello invoke. 10
invoke succed. true
* /