Qt-有没有一种方法可以获得一个类中所有自定义插槽和信号的列表
Qt - Is there a way to get a list of all custom slots and signals in a class
我想获得所有自定义(不是从基类继承的)插槽和信号的列表。这可能吗?还是我必须手动执行?
通常,插槽/信号具有名称(const *
),实际上可以使用该名称作为参数传递给函数,函数内部可以使用这些名称来建立/删除给定的插槽信号连接。
我想得到所有这些的原因是自动生成一组QGraphicsItem
s,它们将表示QGraphicsProxyWidget
的输入(槽)和输出(信号)。这些输入和输出用于连接到其他此类节点(代理窗口小部件+输入+输出)。通过这样做,添加一个新的自定义节点将变得非常容易。
您可以为此使用QMetaObject。使用迭代方法
QMetaMethod method(int index) const int methodCount() const
并检查CCD_ 5 的CCD_
MethodType QMetaMethod::methodType() const
返回此方法的类型(信号、槽或方法)。
编辑:
您可能想要使用
int QMetaObject::methodOffset() const
返回此类的方法偏移量;即该类的第一个成员函数的索引位置。
跳过基类中的方法。
示例:(完整答案来自@rbaleksandar)
对于给定的类别MyClass
,do:
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;
相关文章:
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 信号槽自定义结构问题
- 类继承自QLabel,为什么不调用自定义插槽?
- 在 qt 控制台应用程序中未定义对 'vtable for myObj' 的引用 - 信号和插槽
- Qt-如何在不使用插槽的情况下检测自定义事件循环中的关闭窗口
- qt专用插槽moc未定义引用错误
- 将自定义参数传递到Qt/C++中的插槽
- 如何将信号值Changed从QLineEdit连接到Qt中的自定义插槽
- 将剪切、复制、粘贴快捷方式更改为Qt 5中的自定义槽
- 自定义插槽由qt4设计生成h文件
- Qt-有没有一种方法可以获得一个类中所有自定义插槽和信号的列表
- 我应该怎么做才能使用自定义类对象的 QVector 将信号发送到插槽
- Qt C++-自定义插槽
- Qt C++自定义插槽
- 动态创建自定义小部件的新实例并连接信号和插槽(Qt)
- 在c++中创建一个自定义槽,Qt5
- Qt自定义插槽
- 如何使用自定义Qt c++类型与QML插槽
- 传递自定义类来连接(信号和插槽)
- 在main.cpp中定义信号和插槽