これにはQMetaObjectを使用できます。
QMetaMethod method(int index) const
int methodCount() const
を用いた方法を反復し、QMetaMethod
MethodType QMetaMethod::methodType() const
のMethodType
この方法(信号、スロット、又は方法)のタイプを返しチェック。
編集:あなたは
int QMetaObject::methodOffset() const
は、このクラスのオフセットメソッドを返します使用したい場合があり
。つまりこのクラスの最初のメンバ関数のインデックス位置です。
基本クラスのメソッドをスキップする。
例:(完全な答えのための@rbaleksandarから)
指定されたクラスMyClass
のために行う:
MyClass test;
QMetaObject *moTest = test.metaObject();
QList<QString> slotSignatures;
QList<QString> signalSignatures;
// Start from MyClass members
for(int methodIdx = moTest->methodOffset(); methodIdx < moTest->methodCount(); ++methodIdx) {
QMetaMethod mmTest = moTest->method(methodIdx);
switch((int)mmTest.methodType()) {
case QMetaMethod::Signal:
signalSignatures.append(QString(mmTest.methodSignature())); // Requires Qt 5.0 or newer
break;
case QMetaMethod::Slot:
slotSignatures.append(QString(mmTest.methodSignature())); // Requires Qt 5.0 or newer
break;
}
}
// Just to visualize the contents of both lists
cout << "Slots:" << endl;
foreach(QString signature, slotSignatures) cout << "\t" << signature.toStdString() << endl;
cout << "Signals:" << endl;
foreach(QString signature, signalSignatures) cout << "\t" << signature.toStdString() << endl;
クラスとその親クラスのスロットを取得し、見つけます差? – hyde
特殊なスロットに特別な名前を付けることができます。クラスのスロットを確認し、名前が一致するものを選ぶだけです。 – hyde
スロット/信号を取得するにはどうすればよいですか?私は、スロット/シグナルは全ての関数の後にあります(信号には開発者が提供する実装はありませんが)。クラスは通常スロット/シグナルに指定されたもの以外の関数を持っています。 – rbaleksandar