我是Qt開發新手,我們的設計在幾個地方使用has-a關係。在某些情況下,容器應該暴露內部物體的信號,然後我現在爲每個這樣的信號編寫了一個專用插槽,在那裏我再次發出信號。 Qt中是否有一些快捷方式可以幫助公開容器內部對象的信號?Qt中有關係和信號
1
A
回答
5
您不必創建用於重新發送信號的插槽,就可以將信號與另一個信號連接。這樣您將避免插槽定義。
所以在你的容器你會是這樣的:你必須重新定義你的容器上的信號
connect(object, SIGNAL(signal1()), this, SIGNAL(signal1()));
當然。
欲瞭解更多詳細信息,請檢查signal slot documentation
5
只要你想一個插槽可以連接儘可能多的信號,一個信號可以連接到儘可能多的插槽,你需要。甚至可以將信號直接連接到另一個信號。 (這將立即發出每當第一發射第二信號。)
以下是合法的:
connect(sender, SIGNAL(originalSignal()), SIGNAL(newSignal()));
-1
如果它是你的類的內部結構,你爲什麼不讓它朋友類。那麼你可以直接在你的內部結構裏面呼叫emit parentObj->signal()
0
信號的重新發射也允許重新發射多個信號。
testclass.h:
#include <QObject>
#include <QDebug>
class TestClass : public QObject
{
Q_OBJECT
public:
explicit TestClass(QObject *parent = 0)
{
connect(this, SIGNAL(signal1()), this, SIGNAL(signal2()));
connect(this, SIGNAL(signal1()), this, SIGNAL(signal2()));
connect(this, SIGNAL(signal2()), this, SLOT(slot()));
}
void emitSignal1()
{
emit signal1();
}
signals:
void signal1();
void signal2();
public slots:
void slot()
{
qDebug() << "SLOT HAS BEEN CALLED";
}
};
main.cpp中:
#include <QCoreApplication>
#include "testclass.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
TestClass instance;
instance.emitSignal1();
return a.exec();
}
其結果是,所述狹槽在這種情況下調用兩次。
相關問題
- 1. 關於qt中的信號和插槽
- 2. 信號和Qt的
- 3. RAII和Qt信號
- 4. 如何找到Qt中的信號槽關係?
- 5. 連接信號和在QT
- 6. QT信號和插槽
- 7. 信號和插槽QT
- 8. 信號QT,QueuedConnection
- 9. QT中的信號和插槽
- 10. Qt - 兩類中的信號和插槽
- 11. Qt的信號和槽,線程,app.exec(),和相關查詢
- 12. 信號/槽系統等的Qt與WPF和c#
- 13. QT信號/插槽
- 14. 虛擬Qt信號?
- 15. Qt匿名信號
- 16. 私人QT信號
- 17. Qt插槽和信號:在MainWindow中沒有匹配的功能
- 18. Qt ::用戶驅動關閉的Qt :: Drawer類型窗口信號
- 19. QT信號和插槽意外錯誤
- 20. Qt多重繼承和信號
- 21. Qt信號和插槽對象斷開?
- 22. Qt如何實現信號和插槽?
- 23. QT信號和插槽功能簽名
- 24. Qt信號/插槽和線程
- 25. 初學Qt信號和插槽問題
- 26. C++ Qt設置信號和插槽QMenu
- 27. 可視化QT信號和插槽
- 28. 信號和插槽幫助QT
- 29. 調試Qt信號,插槽和連接
- 30. qt,信號插槽沒有連接?
你會解釋你downvote? –