Qt5.9Creator中自定义信号SIGNAL和在另一个类中用该信号触发槽函数用法

本文章主要总结在Qt5.9Creator中自定义一个信号,然后在另一个类里面用该信号触发槽函数的实例。具体的实例是在类ClassA中自定义一个信号Signal1,然后在MAinWindows类中用该信号Signal1来触发槽函数SlotFunction()的调用。


注意:

1.使用信号与槽机制,一定要是QObject类和QObject派生类才有效,否则该机制是无效的。

2.使用信号与槽机制时,需要在类的头文件的第一行加入Q_OBJECT宏,同时该类最好是QObject的派生类。

3.如果正确使用信号与槽机制,同时没有语法错误;但是编译时仍然报错,这时可以尝试把编译出的build*文件整个删除,然后再次编译。(有时是编译过的build文件对信号与槽机制有影响)


一、具体实例用法

1.1新建一个widget工程,工程名称为SignalTest,基类选择QMainWindows。然后在ui界面上拖入一个pushButton按钮和添加按钮槽函数,如下图所示:

Qt5.9Creator中自定义信号SIGNAL和在另一个类中用该信号触发槽函数用法


1.2新添加一个C++类,类名为ClassA,基类选择为QObject,如下图所示:

Qt5.9Creator中自定义信号SIGNAL和在另一个类中用该信号触发槽函数用法


1.3在classa.h头文件中,添加一个自定义信号Signal1,同时添加一个Test()成员函数,如下代码所示:

Qt5.9Creator中自定义信号SIGNAL和在另一个类中用该信号触发槽函数用法


1.4在源文件classa.cpp中,添加如下代码:

Qt5.9Creator中自定义信号SIGNAL和在另一个类中用该信号触发槽函数用法


1.5接下来,要在主窗口MAinWindows类中,用一个槽函数绑定该信号,同时调用这个信号。在MAinWindows.h头文件中,实例一个类ClassA的对象,代码如下:

Qt5.9Creator中自定义信号SIGNAL和在另一个类中用该信号触发槽函数用法


Qt5.9Creator中自定义信号SIGNAL和在另一个类中用该信号触发槽函数用法


1.6在MAinWindows.h头文件中,添加一个槽函数,该槽函数的作用是与自定义的信号Signal1绑定,代码如下:

Qt5.9Creator中自定义信号SIGNAL和在另一个类中用该信号触发槽函数用法


1.7在MAinWindows.cpp的构造函数中,初始化指针和绑定自定义信号,代码如下:

Qt5.9Creator中自定义信号SIGNAL和在另一个类中用该信号触发槽函数用法


1.8在MAinWindows.cpp的按钮槽函数中,添加如下代码:

Qt5.9Creator中自定义信号SIGNAL和在另一个类中用该信号触发槽函数用法


1.9在自定义槽函数中,添加如下代码:

Qt5.9Creator中自定义信号SIGNAL和在另一个类中用该信号触发槽函数用法


二、构建程序和运行结果,如下图所示:

Qt5.9Creator中自定义信号SIGNAL和在另一个类中用该信号触发槽函数用法


Qt5.9Creator中自定义信号SIGNAL和在另一个类中用该信号触发槽函数用法


由上图结果可知,点击按钮后,触发按钮槽函数;然后按钮槽函数调用ClassA的Test()函数;Test()函数每被调用一次,就触发一次Signal1信号;由于Signal1信号与槽函数SlotFunction()绑定,故触发Signal1信号后,立刻触发SlotFunction()槽函数;而SlotFunction()槽函数的功能是输出一条语句。所以上图结果表明,在一个新建的类(ClassA类)里面自定义一个信号(Signal1),然后在另一个类(MAinWindows类)里面调用该信号,用该信号来触发槽函数的调用,是正确可行的。


三、源代码资源下载:

http://download.csdn.net/download/naibozhuan3744/10270045



参考内容:

http://www.cnblogs.com/ike_li/p/4990626.html(重点参考)

http://blog.csdn.net/u012964993/article/details/30454923