在Qt中通过信号和槽实现控件的交互,但是本人在刚开始编程过程中,有时会因为一些问题无法链接成功。接下来是几种常出现的问题
1.首先检查是否在类定义是添加了
Q_OBJECT
Q_OBJECT
是一个宏,在定义派生自QObject
的类时需要加入,它告诉Qt元对象编译器(MOC,Meta-Object Compiler)处理该类,并生成与信号和槽相关的元对象代码。
2.检查函数名是否填写正确,信号与槽函数的参数个数与类型是否一致,如果不一致也无法连接成功
3.检查信号函数定义是否为
signals:
槽函数是否为
private slots:
可以设为不是私有
4.有时以上都对有时也会在编译输出的时候出现No such slot的错误,可能是由于信号和槽函数的写法问题,可以换一种试一试。Qt有四种信号槽写法:
一、直接函数连接:
QObject::connect(sender, SIGNAL(signal()), receiver, SLOT(slot()));
这是Qt早期的连接语法,使用字符串表示信号和槽。在编译时无法进行类型检查。
二、函数指针连接:
QObject::connect(sender, &SenderClass::signal, receiver, &ReceiverClass::slot);
这种连接方式在编译时进行了类型检查,但在一些情况下可能不够灵活,比如连接到一个