Qt 信号槽传参


利用Qt进行程序开发时,有时需要信号槽来完成参数传递。带参数的信号槽在使用时,有几点需要注意的地方。

第一点:当信号与槽函数的参数数量相同时,它们参数类型要完全一致。

第二点:当信号的参数与槽函数的参数数量不同时。

1:当我们的槽函数参数比信号的参数多时,将会出现QObject::connect: Incompatible sender/receiver arguments错误。

2:当槽函数参数比信号参数少时,而且前面的参数类型一致时,从左往右数多出来的参数将会被忽视。

例如有信号

void signal_fun(int i,string s);

有槽函数

void slot_fun(int i,string s)
{
    qDebug()<<"槽函数收到的参数为:"<<i<<s;
}

链接起来

connect(this,SIGNAL(signal_fun(int,string)),this,SLOT(slot_fun(int,string)));

输入代码

emit signal_fun(123,"hello");

那么则会有输出信息:槽函数收到的参数为123 hello。

除了传递实参,还可以用来传递形参:例如

void fun(int a,string str)
{
    emit signal_fun(a,str);
}

输出的结果就是a和str所代表的参数值。

6.29补充:

槽函数和对应信号的connect应该放在这个对象被创建的文件中,而不是这个对象自身的源文件中

例如:有一个类A和他的槽函数slotA(),在另一个文件B中被创建,则他的connec应该写在B的源文件中。

class A
{
    private slots:
        void slotA();
}
B.cpp

void fun()
{
    A a;//创建一个A的具体对象
    connect(this,SIGNAL(signal()),a,SLOT(slotA()));//不一定要写在这个位置,但是一定要是在这个文件夹中,且connect的时间要在对象被创建之后
}

这样才能生效,因为今天晚上在应用到友元类的时候发现将connect写到A.cpp中的时候,槽函数不会被触发,特此将问题记录下来。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM