QObjectから継承するクラスがあり、Q_OBJECTマクロがあります。
class SomeClass: public QObject
{
Q_OBJECT
public:
SomeClass(QObject *parent = 0);
void method1();
void method2();
...
};
同じヘッダーの別のクラスで、そのクラスのインスタンスを作成してから、「SomeClass」からすべてのメソッドを取得してQMapに格納しようとします。
this->someclass = new SomeClass(); // in constructor.
..。
cout<<"init some class methods"<<endl;
const QMetaObject *metaobj = dynamic_cast<QObject*>(this->someclass)->metaObject();
cout<<"offset "<<metaobj->methodOffset()<<endl;
for(int i = metaobj->methodOffset();i < metaobj->methodCount();i++){
QMetaMethod metamethod = metaobj->method(i);
//if(metamethod.methodType() == QMetaMethod::Method){
QString methodname = QString(metamethod.signature());
methodname = methodname.replace(QRegExp("\\(.*\\)"),"");
controlmethods.insert(methodname,metamethod);
cout<<"added method: "<<metamethod.signature()<<" as "<<methodname.toAscii().data()<<endl;
//}
}
しかし、これは、メソッドのオフセットがメソッドの数に等しいため、追加されたメソッドを表示しません。なぜそうなるのでしょうか。私は理由がわからない、助けてくれてありがとう。