簡體   English   中英

在QT4中沒有這樣的信號

[英]No such signal in 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中沒有這樣的信號MemberVisitor :: processMember():29”

這是應該掛起它們的代碼:

QObject::connect(visitor, SIGNAL(processMember()), finder, SLOT(processMember()));

我也嘗試了所有合理的替代方案,比如在finder上調用函數。 但我一直遇到同樣的問題。 我錯過了什么?

connect()的調用應該是:

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

..提供訪客和發現者是指針。

您需要在QObject :: connect()調用中包含參數類型(但不包括參數名稱)。 例如

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

這也讓你過載信號和插槽,所以你可以發出具有相同名稱但不同參數的信號(與函數的重載相同,這基本上就是一個插槽)。

這也允許您將信號連接到具有較少參數的插槽。 如果您的會員發現者有第二個插槽:

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;
};

您可以將相同的信號連接到第二個插槽,如下所示:

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