qt的信号与槽001

信号(Signal)就是在特定情况下被发射的事件,例如PushButton 最常见的信号就是鼠标单击时发射的 clicked() 信号。发射信号使用Qt的emit关键字。QT 的 signals 关键字指出进入了信号声明区,随后即可声明自己的信号。

(Slot)就是对信号响应的函数。槽就是一个函数,与一般的C++函数是一样的,可以声明在类的任何部分(public、private 或 protected),可以具有任何参数,也可以被直接调用。槽函数与一般的函数不同的是:槽函数可以与一个信号关联,当信号被发射时,关联的槽函数被自动执行。

一个信号对应一个槽:

在头文件中定义一个信号:

signals:
    void Comeon(QString& str);//定义的信号

注意的是:qt中的信号与槽是不能也不需要实现的;

在头文件中定义一个槽方法:

private slots:
    void ComeonGuys(QString& str);

信号与槽关联是用 QObject::connect() 函数实现:

QMetaObject::Connection QObject::connect(

const QObject *sender, //信号发送者

const char *signal, //发送的信号

const QObject *receiver, //信号接收者

const char *method, //表示与信号连接的方式的字符串,可以是槽或信号

Qt::ConnectionType type = Qt::AutoConnection //连接方式,默认自动连接

)

同时信号与槽连接方式

1)Qt::AutoConnection:(默认连接方式)自动方式,由系统自动选择连接方式。
       2)Qt::DirectConnection:直接方式,信号发射时,立即调用槽。

3)Qt::QueuedConnection:队列方式,信号发射时产生一个事件进入队列,事件被处理时槽才能调用。

4)Qt::BlockQueuedConnection:阻塞队列方式,信号发射时产生一个事件进入队列,然后当前线程进入阻塞状态,直到事件处理完毕,若接收方位于发送信号的线程中,则程序会死锁,故此连接方式仅用于多线程。

信号可以看做是特殊的函数,需要带括号,可带参数,信号无需实现也不能实现。槽函数需要带括号,有参数时还需要指明参数。当信号和槽函数带有参数时,在 connect()函数里,要写明参数的类型。信号的参数需与槽的参数列表一致,允许比槽参数多。如果不匹配或参数过少,会出现编译错误或运行错误。在使用信号与槽的类中,必须在类的定义中加入宏 Q_OBJECT。当一个信号被发射时,与其关联的槽函数通常被立即执行,就像正常调用一个函数一样。只有当信号关联的所有槽函数执行完毕后,才会执行发射信号处后面的代码。

将信号与槽连接起来:

方法一:

connect(this,SIGNAL(Comeon(QString&)),this,SLOT(ComeonGuys(QString& str)));

方法二:

connect(this,&QMainWindow::Comenon(QString&),this,&QMainWindow::ComeonGuys(QString&);

用来表示信号和槽的参数都是字符串,Qt提供了两个宏用于构造这样的字符串:对于信号使用SIGNAL,对于槽则使用SLOT,用它们将函数的原型包围起来即可。注意connect方法采用SIGNAL()及SLOT()时,这里的函数原型只能写出类型,不能有任何参数名,否则连接将会失败。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值