2015-10-06 83 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

無論如何,您的解決方案不是一個答案,因爲您無法統計現有連接的數量。 –