2015-10-06 84 views
1

有没有办法找到Qt应用程序中信号/插槽连接的总数有人向我介绍伽玛射线,但有没有更简单的解决方案?信号/插槽连接的总数?

+1

您正在谈论信号/插槽连接,对吗?我调整了这个问题,因为“连接”可能是数据库或网络。你是否想要计算Qt内部连接,还是只计算你自己的对象?你需要什么信息?可能有更好的解决方案。这有帮助吗? http://stackoverflow.com/questions/2755694/determine-signals-connected-to-a-given-slot-in-qt –

+0

感谢您的意见和编辑,我实际上正在寻找一种方法来检查和检查是否有是重复的连接,就像有些时候同一个信号/插槽对连接多次一样。 – Nyaruko

+2

@Nyaruko不是你的问题的答案,但如果你想避免重复,你可以使用'Qt :: UniqueConnection'标志。顺便说一句,GammaRay是开源的,你可以研究它的代码。这是非常强大的工具。 –

回答

1

检查Qt::UniqueConnection

This is a flag that can be combined with any one of the above connection types, using a bitwise OR. When Qt::UniqueConnection is set, QObject::connect() will fail if the connection already exists (i.e. if the same signal is already connected to the same slot for the same pair of objects). [...]

然后使用的情况下断言的连接也存在,这将你的程序崩溃表明一个编程错误:

QLabel *label = new QLabel; 
QLineEdit *lineEdit = new QLineEdit; 
auto ok = QObject::connect(lineEdit, &QLineEdit::textChanged, 
      label, &QLabel::setText, 
      Qt::UniqueConnection); 
Q_ASSERT(ok); 

免责声明:未经测试。

+0

'bool ok = QObject :: connect'是错误的。返回类型是'QMetaObject :: Connection' - 它可以用于将来的诊断。 –

+0

好吧,我想'运算符布尔()'处理。固定。 –

+0

无论如何,您的解决方案不是一个答案,因为您无法统计现有连接的数量。 –