我是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? –