跳转至

Qt信号槽中形参名不能为"connect"

Qt信号槽中形参名不能为connect,会与信号槽连接的关键函数有冲突,并报警告

我计划使用Qt的信号槽函数传递硬件的连接状态,于是有如下的信号定义和槽定义:

class ClassA: public QObject
{
    Q_OBJECT

public:
    explicit ClassA(QObject *parent = nullptr);
    ~ClassA() override;

signals:
    void SigRemoteConnectStateChanged(QString ipAddr, bool connect);
}
class ClassB: public QObject
{
    Q_OBJECT

public:
    explicit ClassB(QObject *parent = nullptr);
    ~ClassB() override;

public slots:
    void SltConnectStatusChanged(QString ipAddr, bool connect);
}

然后连接上述的信号槽。出现了如下的报错:

ClassB.cpp:000:00: error: declaration of connect shadows a member of ClassB [-Werror=shadow]
 void ClassB::SltConnectStatusChanged(QString ipAddr, bool connect)
                                                                               ^
In file included from /opt/Qt5.12.7/5.12.7/gcc_64/include/QtCore/QObject:1:0,
                 from remote/RemoteViewerManager.h:16,
                 from remote/RemoteViewerManager.cpp:9:
/opt/Qt5.12.7/5.12.7/gcc_64/include/QtCore/qobject.h:308:13: note: shadowed declaration is here
             connect(const typename QtPrivate::FunctionPointer<Func1>::Object *sender, Func1 signal, const QObject *context, Func2 slot,
             ^~~~~~~
cc1plus: all warnings being treated as errors

看这个原因是connect重定义类,也就是形参命名与系统的函数命名冲突了,变成了警告信息,我这里设置的编译器是将警告当成错误,于是报错类。