我想使用在编译时进行类型检查的新语法来为QObject的连接构建一个包装器。 主要思想是:“嗨,听众,将此对象的插槽连接到我的newData信号上”
void Listener::_addClient(const QObject *object, const QMetaMethod& slot)
{
connect(this, &Listener::newData, object, slot);
}
有些Client
类可以做到:
Listener myListener;
myListener._addClient(this, &Client::mySlot);
这当然不会编译。
Listener
对象将归一个管理器类所有,因此我无法直接访问它们,因此无法进行传统的连接。如何为该连接构建包装器,以便确保在编译时进行类型检查?
答案 0 :(得分:0)
您可以使用模板:
template <typename Receiver, typename Slot>
void Listener::_addClient(const Receiver *object, const Slot& slot)
{
connect(this, &Listener::newData, object, slot);
}
答案 1 :(得分:0)
我无法使用Jarod42解决方案,因为我需要访问受保护的属性并且该方法必须公开。
我最终进行了以下操作
void Listener::_addClient(const QObject *receiver, const char *slot)
{
connect(this, SIGNAL(newData()), receiver, slot);
}
这样打电话
Listener myListener;
myListener._addClient(this, SLOT(mySlot()));
这可能不是进行操作的最主要方法,但它可行。