QT的信号和槽

信号和槽通过平滑的扩展C++语法并充分利用C++的面向对象特性实现。信号和槽是类型安全的,可以重载,也可以重新实现,可以出现在类的公有区、保护区或私有区。若要使用信号和槽,必须继承 QObject 或其子类(比如QWidget类),并在类的定义中包括 Q_OBJECT 宏。信号在类的“信号区”声明,而槽则是在“公有槽区”、“保护槽区”或“私有槽区”中声明的。

对象间的信号与槽的关系如下图:











一个对象可以拥有0到多个信号和槽;一个信号可以连接多个槽,一个槽也可以连接多个信号;信号可以被动连接一个或多个槽(通过connect(Object1,signal1,Object2,slot2)),也可以主动发出信号(通过emit Singal(arguments)),不管有没有槽响应;一个信号不知道会有哪个或者会不会有槽来响应。

参数类型相同的信号和槽可以互相连接。槽的参数个数可以少于信号的参数个数,这时多余的参数将被忽略。


 “信号与槽”学习补充:

(1)       一个信号可以与另外一个信号相连接,当发射第一个信号时,也会发射第二个信号;

(2)       连接可以被移除:disconnect(sender,SIGNAL,receive,SLOT);

(3)       要把信号成功连接到槽(或者连接到另外一个信号),它们的参数必须具有相同的顺序和相同的类型;如果信号的参数比它所连接的槽的参数多,那么多余的参数将会被简单地忽略掉。(这里的参数指的参数类型,不是参数名,也不能加参数名)。


重新认识和学习emit的用法

信号与槽的连接方式connect(this,&MainWindow::emitValue, table_view, &TableView::changeValue);

发射信号的方式 emit emitValue(haveSize);


有关信号与槽连接时出现问题及解决方法:

  Object::connect: Nosuch signal QTreeWidget::itemClicked(QTreeWidgetItem*item,int column)…

原因:在信号和槽连接时,只需要加上参数的类型,不能加参数名。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值