首页 > 编程知识 正文

qt如何知道信号连了几个槽函数,qt connect函数参数

时间:2023-05-05 10:14:27 阅读:166611 作者:3703

目录介绍了当Qt信号和时隙的常见格式为发送信号的位置为静态函数时的问题解决方案

介绍

信号和插槽用于对象之间的通信。 信号和插槽机制是Qt的核心特性,可能是与其他框架提供的特性最不同的部分。 Qt的元对象系统使信号和槽成为可能。

在GUI编程中,更改小部件时,通常希望通知其他小部件。 更一般地说,我们希望任何类型的对象都能相互通信。 例如,如果用户单击“关闭”按钮,则可以调用窗口的Close ()函数。

其他工具包使用回调实现这个通信。 回调是指向函数的指针,因此如果要让处理程序通知某个事件,请将指向另一个函数(回调)的指针传递给处理程序。 处理函数并根据需要调用回调。 使用这种方法的成功框架确实存在,但是回调是不直观的,可能会在确保回调参数类型的准确性方面出现问题。

Qt中的信号和时隙在Qt中有回调技术的替代方法。 使用信号和插槽。 发生特定事件时,会发送信号。 Qt小部件具有许多预定义的信号,但是我们总是可以对小部件进行子类化,并向它们添加我们自己的信号。 槽是响应特定信号而调用的函数。 Qt小部件具有许多预定义的插槽,但是通常将小部件子类化,并添加自己的插槽以处理感兴趣的信号。 (以上摘自Qt官方文档)

一般形式下是一般的信号箱形式。 (案例摘自官方文档)

//demo.h # includeqobjectclasscounter : publicqobject (q _ object//public 3360 counter ) ) { m_value=0; }intvalue(const ) returnm_value; }公共slots : void setvalue (intvalue ) if ) value!=m_value(m_value=value; EMITvaluechanged(value; } signals : voidvaluechanged (int new value ); private: int m_value; (; //demo.cppvoidcounter :3360 setvalue (intvalue ) if ) value!=m_value(m_value=value; EMITvaluechanged(value; } } Counter a,b; q对象:3360连接(a,Counter:valueChanged,b,Counter:setValue ); a.setvalue(12 ); //a.value(==12,b.value ) )==12b.setvalue ) 48; //a.value(==12,b.value )==48如果发送信号的地方是静态函数,如果发送信号的地方是静态函数,则采用上述形式会出错。 在这种情况下,发送信号的类必须添加静态指针以供使用。

//demo.h # includeqobjectclasscounter : publicqobject (q _ object//public 3360 counter ) ) { m_value=0; } static Counter* pointer_; //其中int value () const { return m_value; } public slots : staticvoidsetvalue (intvalue ) /发送信号的位置是静态函数if ) value!=m_value(m_value=value; emit pointer _-value changed (value; //参考信号发送格式之前的加号静态指针} signals : voidvaluechanged (int new value ); private: int m_value; (; //demo.cpp用法Counter a,b; q对象:3360连接(a,Counter:valueChanged,b,Counter:setValue ); a.setvalue(12 ); //a.value(==12,b.value ) )==12b.setvalue ) 48; //a.value(==12,b.value )==48问题上述信号仅对代码最初绑定的信号有效,如果多次连接,后面的插槽将不再响应。 一个类中的静态函数只存在一个信号。 如果有多个信号,除了最初以外不回答。 解决方案将枚举变量添加到信号中,以区分信号类别,将信号与另一个非静态函数的插槽相关联,并通过枚举变量在该插槽中发送不同的信号。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。