QT中信号函数的理解

先是百度知道里的对话:

看到QT帮助中和一些文档知道,qt 的信号函数并没有函数体,如果没有函数体,如何知道触发了哪个connect函数,也看到好多的信号函数的声明里面的参数只是一个int或者两个int,并没有变量名,那如果这个对象的信号触发了槽函数,那么,该信号传递给槽函数的参数又是什么呢?
那个就叫信号,不是信号函数,也不能有函数体。
回答
只是消息的代称,仅用于触发执行槽函数。
信号声明里的参数就是槽函数的参数,二者声明完全一致的。
看到int甭管,去找槽函数里实际的参数声明就行了。
真实存在的函数只有槽函数一个。
追问
那请问是否这样理解,如果信号里面无参数,那么这个对象的任何变量发生改变,比如定义了一个QPushButton *button = new QPushBuuton("QUIT");connect(button,SIGNAL(clicked()),qApp,SLOT(quit()));
那么button的任何改变都会发射这个消息使得窗口退出,而不仅仅是clicked。
    如果有参数,那么这个参数做什么用,是否是检测到这个槽函数的参数发生了改变才会发这个信号?求解释,谢谢
回答
你这不瞎扯嘛。
信号是一个动作触发的,如点击鼠标、按下键盘等,
或者在代码里面使用触发函数触发信号。
跟你说的参数不参数没关系。
比如按钮的click(),鼠标单机就会触发该消息,没有参数。
数字框 QSpinBox的键入数值改变时,会触发valueChanged(int)信号。
信号触发是信号触发,跟参数没关系。信号触发后,有些不需要传递数据,如click(),有些需要传递数据如valueChanged(int),
动作决定信号! 不是参数决定信号。
信号触发后,再看需不需要传参数。
你的理解不对:
connect(button,SIGNAL(clicked()),qApp,SLOT(quit()));
这句是将clicked()信号关联到应用程序的退出函数quit()。
单机动作触发clicked()信号,clicked()信号触发后立即执行其关联函数quit(),
由应用程序的quit()结束程序。
这过程中与参数没任何关系,逻辑过程是这样的:
单机按钮-----》触发clicked()------》执行退出函数quit()----》结束。
追问
非常感谢您,我可不可以这样理解,动作跟信号关联?比如您说的这个clicked(),鼠标单击就会触发消息,这个是否是QT内部已经定义好了的?
如果是自定义的信号,怎么关联动作呢?小弟刚学qt,多谢提点!大虾有无这类学习的QQ群或者文章什么的?
回答
鼠标、键盘这类动作操作系统都内定好了的,不用你操心。
自定义信号要看书:
C++ GUI Qt 4编程(第二版) 
Qt高级编程
你自己学吧。
=======================================sno自己的理解==================================
 从这里可以看出如何定义一个信号,如何发送一个信号,如何connect一个信号,
定义:
在类中:
signals:   
    void angleChanged(int newAngle)
 
     
关联一个信号:
    connect(angle, SIGNAL(valueChanged(int)),   cannonField, SLOT(setAngle(int)));
发射一个信号(产生信号的动作或来源):
void CannonField::setAngle(int angle)
{
    if (angle < 5)
        angle = 5;
    if (angle > 70)
        angle = 70;
    if (currentAngle == angle)
        return;
    currentAngle = angle;  ///如果角度和当前的不一样,发射angleChanged信号.
    update(cannonRect());
    emit angleChanged(currentAngle);
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值