是否可以在不連接它們的情況下向插槽發送信號? 有一個類有一個顯示一些日誌的SLOT。 現在我們沒有任何信息將會使用多少個類將信號發送到這個日誌槽,我們也不能相互發送它們的對象,但是每個對象都可能發送日誌請求。Qt匿名信號
Q
Qt匿名信號
0
A
回答
4
您可以像調用普通成員函數一樣調用對象的(公共)插槽。連接不是必需的。
此外,您不需要事先知道誰將連接到給定的插槽。連接可以發生在班級之外。 (至少公開插槽)
0
我認爲沒有這種可能性。但是,也許你可以使log()方法成爲靜態的,這樣你就可以在不引用記錄器對象的情況下調用log()方法?
3
是的,你可以用幾種方法。
您可以像其他任何C++函數一樣調用該插槽(如果它是public
)。插槽仍然是C++函數。缺點是調用者需要在編譯時知道接收者的接口。
logger.log("The frobnitz could not be quuxed");
您可以通過QMetaObject::invokeMethod
調用插槽。使用這種方法,調用者不需要關於收件人的任何編譯時信息,除了它是QObject*
。
if (!QMetaObject::invokeMethod(logger, "log", Q_ARG(QString, "The frobnitz could not be quuxed"))) {
qWarning("Internal error: logging failed (did someone change the logger API?)");
}
相關問題
- 1. 信號QT,QueuedConnection
- 2. QT信號和插槽功能簽名
- 3. 虛擬Qt信號?
- 4. LeapMotion,Qt和信號
- 5. RAII和Qt信號
- 6. QT QNetworkAccessManager和信號
- 7. 信號和Qt的
- 8. QT信號/插槽
- 9. 私人QT信號
- 10. Qt Qt中的信號和插槽
- 11. Qt MDI信號設計
- 12. Qt信號 - 時隙交互。
- 13. Qt shared_ptr信號與QThreadPool
- 14. Qt連接信號插槽
- 15. QT信號和插槽
- 16. Qt如何傳輸信號?
- 17. Qt QTableView - 'Nothing selected'信號
- 18. Qt信號槽混淆
- 19. Qt連接信號插槽
- 20. Qt信號和插槽xml
- 21. Qt的:在的SelectionChanged()信號
- 22. 無法連接QT信號
- 23. 的Qt:發射信號
- 24. 連接信號和在QT
- 25. 私人/公共qt信號
- 26. Qt信號的繼承?
- 27. QT-Dbus信號/插槽?
- 28. QT線程,信號順序
- 29. Qt鎖定和信號
- 30. Qt PushButton信號和插槽
雖然這是真的,你可以調用一個插槽與任何常規方法(因爲它是一個正常的方法),該解決方案是更清潔,因爲它實際上將排隊的行動,並讓事件循環處理它。在線程之間傳遞消息時,以及如果您需要更多動態消息傳遞,這就是要走的路。 – 2014-02-25 21:33:37