简体   繁体   English

在QT4中没有这样的信号

[英]No such signal in QT4

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" 但我肯定错过了一些东西,因为QT一直给我错误:“Object :: connect:在OperationsOnMembers.cpp中没有这样的信号MemberVisitor :: processMember():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. 我也尝试了所有合理的替代方案,比如在finder上调用函数。 But I keep getting the same problem. 但我一直遇到同样的问题。 What am I missing? 我错过了什么?

The call to connect() should be: connect()的调用应该是:

QObject::connect(visitor, SIGNAL(processMember(Member*, bool&)), 
    finder, SLOT(processMember(Member*, bool&)));

..provided that visitor and finder are pointers. ..提供访客和发现者是指针。

You need to include the parameter types (but not the parameter names) in the QObject::connect() call. 您需要在QObject :: connect()调用中包含参数类型(但不包括参数名称)。 eg 例如

QObject::connect(visitor, SIGNAL(processMember(Member*, bool&)), finder, SLOT(processMember(Member*, bool&)));

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 : 如果您的会员发现者有第二个插槽:

class MemberFinder: public QObject
{
    Q_OBJECT
public slots:
    void processMember(Member* member, bool &breakLoop);
    void processMember(Member* member);
public:
    Member* member();
    MemberFinder(QString memID): m_member(0), m_memID(memID) {};
private:
    Member* m_member;
    QString m_memID;
};

You could connect the same signal to the second slot as such : 您可以将相同的信号连接到第二个插槽,如下所示:

QObject::connect(visitor, SIGNAL(processMember(Member*, bool&)), finder, SLOT(processMember(Member*)));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM