自定义信号槽

1 发送者和接收者都需要是 QObject 的子类(当然,槽函数是全局函数、 Lambda
表达式等无需接收者的时候除外);
2 使用 signals 标记信号函数,信号是一个函数声明,返回 void,不需要实
现函数代码;
3 槽函数是普通的成员函数,作为成员函数,会受到 public、 private、
protected 的影响;
4 使用 emit 在恰当的位置发送信号;
5 使用 QObject::connect()函数连接信号和槽。 任何成员函数、 static 函数、全局函数和 Lambda 表达式都可以作为槽函数

 一个信号可以和多个槽相连 如果是这种情况,这些槽会一个接一个的被调用,但是它们的调用顺序
是不确定的。

多个信号可以连接到一个槽
只要任意一个信号发出,这个槽就会被调用。

 一个信号可以连接到另外的一个信号
当第一个信号发出时,第二个信号被发出。除此之外,这种信号-信号的形
式和信号-槽的形式没有什么区别。
 槽可以被取消链接
这种情况并不经常出现,因为当一个对象 delete 之后, Qt 自动取消所有连
接到这个对象上面的槽。

使用 Lambda 表达式
在使用 Qt 5 的时候,能够支持 Qt 5 的编译器都是支持 Lambda 表达式的。

在连接信号和槽的时候, 槽函数可以使用 Lambda 表达式的方式进行处理。

Qt中的信号(Signal)和(Slot)机制是一种用于事件驱动编程的强大工具,它们使得对象之间能够进行异步通信。当你创建一个自定义信号时,你实际上是在声明一个特定的行为可以在某个时刻被触发;而则是一个预先定义好的函数,当接收到信号时会被调用。 以下是如何在Qt中创建自定义信号实例的步骤: 1. **定义信号**: 首先,在头文件中使用`Q_SIGNALS`宏定义一个或多个信号。例如: ```cpp class MyClass : public QObject { Q_OBJECT signals: void myCustomSignal(int value); // 定义一个接受整数参数的信号 }; ``` 2. **发出信号**: 在类的方法中,你可以使用`emit`语句来发送信号。例如: ```cpp void MyClass::doSomething() { int result = ...; // 计算结果 emit myCustomSignal(result); } ``` 3. **连接信号**: 使用`connect()`函数信号关联起来。这通常在类的构造函数、主窗口或者Qt Designer中完成: ```cpp connect(&myObject, &MyClass::myCustomSignal, this, &MainWindow::slotMethod); // 将信号连接到 ``` 或者如果你使用Qt Designer,可以在设计界面中直接拖拽信号上。 4. **定义函数**: 函数是接收信号并执行相应操作的地方,通常在窗体或者类中定义: ```cpp void MainWindow::slotMethod(int value) { QLabel *label = new QLabel(tr("Received signal with value: %1").arg(value), this); layout.addWidget(label); } ``` 5. **解耦和灵活性**: 由于信号之间的松散耦合,你可以在任何时候改变信号的发出方,或者添加新的来处理相同的信号,而不影响其他代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值