qns到底怎样在Qt框架中正确声明信号与槽函数呢?
信号的声明
- 声明位置:信号应在类的声明中,使用关键字。这个关键字标记了一个信号区域,该区域内的函数即为信号。信号只能在plaintext复制
signals
派生类中声明。plaintext复制QObject
- 声明语法:信号的声明与普通成员函数类似,但没有函数体,且返回类型必须为。例如:plaintext复制
void
cpp复制classMyClass:publicQObject
{
Q_OBJECT
signals:
voidmySignal(intvalue);
};
槽函数的声明
- 声明位置:槽函数同样在类的声明中,使用、plaintext复制
publicslots
或plaintext复制protectedslots
关键字,分别表示不同的访问权限。和信号一样,槽函数也只能在plaintext复制privateslots
派生类中声明。plaintext复制QObject
- 声明语法:槽函数有函数体,其返回类型通常为,参数要和与之连接的信号的参数兼容。例如:plaintext复制
void
cpp复制classMyClass:publicQObject
{
Q_OBJECT
publicslots:
voidmySlot(intvalue);
};
信号与槽的连接
声明好信号和槽函数后,需要使用
plaintext
复制
QObject::connect
cpp复制MyClassobj1,obj2; QObject::connect(&obj1,SIGNAL(mySignal(int)),&obj2,SLOT(mySlot(int)));
在较新的Qt版本中,也推荐使用基于函数指针的连接方式:
cpp复制QObject::connect(&obj1,&MyClass::mySignal,&obj2,&MyClass::mySlot);
这种方式在编译时进行类型检查,能更早发现错误。