QT4中没有这个信号
我有一个信号和一个插槽,应该可以很好地配合在一起。
class MemberVisitor: public QObject
{
Q_OBJECT
signals:
void processMember(Member* member, bool &breakLoop);
public:
void processList(QList<Member*>* list);
};
以及:
class MemberFinder: public QObject
{
Q_OBJECT
public slots:
void processMember(Member* member, bool &breakLoop);
public:
Member* member();
MemberFinder(QString memID): m_member(0), m_memID(memID) {};
private:
Member* m_member;
QString m_memID;
};
并不复杂,对吧?但我肯定错过了一些东西,因为 QT 不断给我错误:“Object::connect: OperationsOnMembers.cpp:29 中没有这样的信号 MemberVisitor::processMember()”
这是应该将它们连接起来的代码:
QObject::connect(visitor, SIGNAL(processMember()), finder, SLOT(processMember()));
我已经还尝试了所有合理的替代方案,例如在查找器上调用该函数。但我一直遇到同样的问题。我缺少什么?
I have a signal and a slot that should fit together quite nicely.
class MemberVisitor: public QObject
{
Q_OBJECT
signals:
void processMember(Member* member, bool &breakLoop);
public:
void processList(QList<Member*>* list);
};
along with:
class MemberFinder: public QObject
{
Q_OBJECT
public slots:
void processMember(Member* member, bool &breakLoop);
public:
Member* member();
MemberFinder(QString memID): m_member(0), m_memID(memID) {};
private:
Member* m_member;
QString m_memID;
};
Not exactly complex, right? But I am definitely missing something, because QT keeps giving me the error: "Object::connect: No such signal MemberVisitor::processMember() in OperationsOnMembers.cpp:29"
Here's the code that should be hooking them up:
QObject::connect(visitor, SIGNAL(processMember()), finder, SLOT(processMember()));
I've also tried all the reasonable alternatives, like calling the function on finder. But I keep getting the same problem. What am I missing?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
对
connect()
的调用应该是:..假设访问者和查找者是指针。
The call to
connect()
should be:..provided that visitor and finder are pointers.
您需要在 QObject::connect() 调用中包含参数类型(但不包含参数名称)。例如,
这还允许您重载信号和槽,因此您可以发出具有相同名称但不同参数的信号(与函数重载相同,这基本上就是槽)。
这还允许您将信号连接到参数较少的插槽。如果您的会员查找器有第二个插槽:
您可以将相同的信号连接到第二个插槽,如下所示:
You need to include the parameter types (but not the parameter names) in the QObject::connect() call. e.g.
That also lets you overload signals and slots, so you can emit signals with the same name but different parameters (same as overloading of a function, which is basically what a slot is).
This also lets you connect a signal to a slot that has fewer parameters. If your Member finder had a second slot as such :
You could connect the same signal to the second slot as such :