一 编绎时就出错,信号与槽连接失败
1 报错如下
error C2664: “QMetaObject::Connection QObject::connectImpl(const QObject ,void **,const QObject ,
void *,QtPrivate::QSlotObjectBase ,Qt::ConnectionType,const int ,const QMetaObject )”:
无法将参数 1 从“const TaskBegin ”转换为“const QObject ” (编译源文件 MainFrame.cpp)
失败原因:信号的sender并非继承自QObject
解决方案:不要用QThreadPool的类(继承自QRunable),因为这种方法不能发送信号
二 编绎成功,但信号与槽连接失败
1 失败原因:槽函数并没有声明在类的public slots(或private slots或protected slots)里
解决方案:
class TaskPause : public QObject
{
Q_OBJECT
public:
int m_row;
TaskPause(int row) : m_row(row) {};
void run();
signals:
void sigPause();
public slots:
void onPause();
};
2 失败原因:信号和槽之间存在参数传递,但是二者的参数数量或者类型不一致(信号里的参数数量可以多于槽函数里的参数数量,但是二者都有的参数,类型必须对应);
3 失败原因:使用connect时, 在槽函数或者信号中加入了形参
解决方案:不要写形参
connect(sender, SIGNAL(sendMessage(int)), receiver, SLOT(getMessage(int)));
4 报错如下
Object::connect: No such signal multiRobots::moveToOnePoint (QList
Object::connect:(sender name: ‘multiRobotsClass’)
失败原因:信号和槽之间存在自定义参数传递,但是传递的类型没有注册。
解决方案:
#include
qRegisterMetaType