您好,欢迎来到华拓科技网。
搜索
您的当前位置:首页QT—信号与槽(Signal & Slot)

QT—信号与槽(Signal & Slot)

来源:华拓科技网

SIGNAL SLOT Qt 的宏,用于指明信号和槽,并将它们的参数转换为相应的字符串。

1、信号(Signal本质就是事件。

     由于用户对窗口或控件进行了某些操作,导致窗口或控件产生了某个特定事件,Qt对应的窗口类会发出某个信号,以此对用户的挑选做出反应。

     PushButton 最常见的信号就是鼠标单击时发射的 clicked() 信号,例如:一个 ComboBox 最常见的信号是选择的列表项变化时发射的 CurrentIndexChanged() 信号。

     由于信号只需声明,无需定义。所以只需要在 mianwindow.h 里声明信号即可。

2、槽(Slot)本质是对信号响应的函数。

     槽就是一个函数,与一般的 C++函数是一样的,可以定义在类的任何部分(publicprivate protected),可以具有任何参数,也可以被直接调用。

     创建槽直接在 mianwindow.h 里直接声明槽,在 mianwindow.cpp 里 实现槽的定义,声明槽必须写槽的定义(定义指函数体的实现),否则编译器编译时将会报错。

     槽函数与一般的函数不同的是:槽函数可以与一个信号关联,当信号被发射时,关联的槽函数被自动执行。

3、QObject::connect() 函数

    信号与槽关联是用 QObject::connect() 函数实现的,connect() QObject 类的一个静态函数,而 QObject 是所有 Qt 类的基类,在实际调用时可以忽略前面的限定符,所以可以直接写为:

connect(sender, SIGNAL(signal()), receiver, SLOT(slot()));

connect(信号发送者,发送的具体信号,信号接受者,信号处理(槽))

(1)一个信号可以连接多个槽,例如:

connect(pushButton, SIGNAL(clicked()), this, SLOT(hide());

connect(pushButton, SIGNAL(clicked()), this, SLOT(close());

这是当一个对象 pushButton 的被单击时,所在窗体有两个槽进行响应,一个 hide()用于隐

藏主窗体,一个 close 用于关闭主窗体。

注:当一个信号与多个槽函数关联时,槽函数按照建立连接时的顺序依次执行。

当信号和槽函数带有参数时,在 connect()函数里,要写明参数的类型,但可以不写参数名

称。

(2)多个信号可以连接同一个槽

connect(pushButton,SIGNAL(clicked()),this,SLOT(close()));

connect(pushButton_2,SIGNAL(clicked()),this,SLOT(close()));

connect(pushButton_3,SIGNAL(clicked()),this,SLOT(close()));

当任何一个 pushButton 被单击时,都会执行 close()函数,进而关闭或者退出程序。

(3)一个信号可以连接另外一个信号

connect(pushButton, SIGNAL(objectNameChanged(QString)),this, SIGNAL(windowTitelChan

ged(QString)));

注:严格的情况下,信号与槽的参数个数和类型需要一致,至少信号的参数不能少于槽的参数。 如果不匹配,会出现编译错误或运行错误。

注:当一个信号被发射时,与其关联的槽函数通常被立即执行,就像正常调用一个函数一样。

只有当信号关联的所有槽函数执行完毕后,才会执行发射信号处后面的代码。

4、简单总结Signal & Slot使用方法 :

(1)定义信号:

在需要发出信号的对象中定义一个信号函数,信号函数需要使用signals关键字进行声明。

(2)定义槽函数:

在需要响应信号的对象中定义一个槽函数,槽函数需要使用slots关键字进行声明。

(3)连接信号与槽:

使用connect函数将信号与槽进行连接,从而实现信号的响应。

(4)发出信号:

使用emit关键字来发出信号。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo6.cn 版权所有 赣ICP备2024042791号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务