QMetaObject::invokeMethod の使用法を理解しようとしています。私は1つの引数(非const QString)を持つ関数を持っています。それを出力にしたいのですが、関数には戻り値がなく、invokeMethodの呼び出しは常に失敗しますが、戻り値があり引数がない別の関数を呼び出すことはできません成功しました。コードは次のとおりです。
myclass.h
#include <QDebug>
class MyClass: public QObject
{
Q_OBJECT
public:
MyClass() {}
~MyClass() {}
public slots:
QString func();
void func2(QString& res);
};
myclass.cpp
#include "myclass.h"
QString MyClass::func()
{
QString res = "func succeeded";
qDebug() << res;
return res;
}
void MyClass::func2(QString& res)
{
res = "func2 succeeded";
qDebug() << res;
return;
}
main.cpp
#include <QCoreApplication>
#include "myclass.h"
int main(int argc, char *argv[])
{
QString msg;
MyClass myobj;
QCoreApplication a(argc, argv);
bool val = QMetaObject::invokeMethod(&myobj, "func", Q_RETURN_ARG(QString, msg));
qDebug() << "func returns" << val;
val = QMetaObject::invokeMethod(&myobj, "func2", Q_RETURN_ARG(QString, msg));
qDebug() << "func2 returns" << val;
int ret = a.exec();
return ret;
}
結果は次のとおりです。
$ ./test
"func succeeded"
func returns true
QMetaObject::invokeMethod: No such method MyClass::func2()
Candidates are:
func2(QString&)
func2 returns false
いろいろ試したのですが、うまくいきません 原因わかる方いますか?前もって感謝します!