Qt学习——信号与槽机制

信号和槽是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性,也是 QT 区别于其它工具包的重要地方。

所有从 QObject 或其子类 ( 例如 Qwidget) 派生的类都能够包含信号和槽。当对象改变其状态时,信号就由该对象发射 (emit) 出去,这就是对象所要做的全部事情,它不知道另一端是谁在接收这个信号。这就是真正的信息封装,它确保对象被当作一个真正的软件组件来使用。槽用于接收信号,但它们是普通的对象成员函数。一个槽并不知道是否有任何信号与自己相连接。而且,对象并不了解具体的通信机制。
你可以将很多信号与单个的槽进行连接,也可以将单个的信号与很多的槽进行连接,甚至于将一个信号与另外一个信号相连接也是可能的。如果存在多个槽与某个信号相关联,那么,当这个信号被发射时,这些槽将会一个接一个地 执行,但是它们执行的顺序将会是随机的、不确定的,我们不能人为地指定哪个先执行、哪 个后执行。





信号:
    可以是用控件自带的一些信号,如pushbutton的clicked()信号等。也可以自己定义,在头文件中定义:
signals:
    void mysignal();



槽:
    可以是object自带的槽,如QApplication的quit()等。也可以自己在头文件中定义:
slots:
    void myslot();



信号与槽的关联:
 通过调用 QObject 对象的 connect 函数来将某个对象的信号与另外一个对象的槽函数相关联,这样当发射者发射信号时,接收者的槽函数将被调用。该函数的定义如下:
bool QObject::connect ( const QObject * sender, const char * signal, const QObject * receiver, const char * member ) [static]


这个函数的作用就是将发射者 sender 对象中的信号 signal 与接收者 receiver 中的 member 槽函数联系起来。当指定信号 signal 时必须使用 QT 的宏 SIGNAL(),当指定槽函数时必须使用宏 SLOT()。如果发射者与接收者属于同一个对象的话,那么在 connect 调用中接收者参数可以省略。

如下,让按钮具有退出的作用:
QPushButton *button=new QPushButton(this); 
connect(button,SIGNAL(clicked()),qApp,SLOT(quit()));

这里将按钮button的点击clicked信号与程序qApp的退出quit()槽关联类起来。这里的信号和槽都是类中自带的。

当点击按钮时,触发quit()方法,quit()调用exit()使应用程序退出。


也可以在ui设计界面拖入pushbutton,然后右击button选择转到槽

然后选择clicked:


  


下面编写相应的处理函数即可:

void Dialog::on_pushButton_clicked()
{ 
        //qApp->quit();
        qApp->exit();
}  

在响应函数里可以调用sender()获得发送信号的对象
QPushButton *btn=(QPushButton*)sender();
btn->setText("adfdfds");


这样也可以实现,原理是相同的。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值