我有一个从子类获取的参数发出的信号,但是在一个插槽实现中,我不需要子类的特殊处理程序;只是父类。我认为connect()
会改变那个参数,但不幸的是,我得到了:
QObject::connect: Incompatible sender/receiver arguments
emitter::mysignal(messageSubclass *) --> slotter::generalHandler(messageSuperclass *)
在emitter
我有:
emit mysignal((messageSubclass *)msg_ptr );
代码中有各种各样的地方我需要专门处理这个messageSubclass
。但是,在一个地方,只有一个插槽方法可以处理整个信号系列,所以我有:
connect(emitter_ptr, SIGNAL(mysignal(messageSubclass *)), this, SLOT(generalHandler(messageSuperclass *)));
我真的不想让几个特定处理程序替换generalHandler()
,这些处理程序都做同样的事情。换句话说,我试图避免一些单调乏味的事情:
connect(emitter_ptr, SIGNAL(mysignal(messageSubclass *)), this, SLOT(specificHandler(messageSubclass *)));
connect(emitter_ptr, SIGNAL(mysignalA(messageSubclassA *)), this, SLOT(specificHandlerA(messageSubclassA *)));
connect(emitter_ptr, SIGNAL(mysignalB(messageSubclassB *)), this, SLOT(specificHandlerB(messageSubclassB *)));
connect(emitter_ptr, SIGNAL(mysignalC(messageSubclassC *)), this, SLOT(specificHandlerC(messageSubclassC *)));
...
void handlerClass::specificHandler(messageSubclass *msg_ptr) {
generalHandler((messageSuperclass *)msg_ptr);
}
void handlerClass::specificHandlerA(messageSubclassA *msg_ptr) {
generalHandler((messageSuperclass *)msg_ptr);
}
void handlerClass::specificHandlerB(messageSubclassB *msg_ptr) {
generalHandler((messageSuperclass *)msg_ptr);
}
void handlerClass::specificHandlerC(messageSubclassC *msg_ptr) {
generalHandler((messageSuperclass *)msg_ptr);
}
再次,我需要
signals:
mysignal(messageSubclass *);
适用于需要messageSubclass
的其他广告位。
我正在使用Qt 4.8