Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
QT信号错误:“;这";对于静态成员函数不可用_Qt_C++11_Qtcpsocket - Fatal编程技术网

QT信号错误:“;这";对于静态成员函数不可用

QT信号错误:“;这";对于静态成员函数不可用,qt,c++11,qtcpsocket,Qt,C++11,Qtcpsocket,我正在为我的应用程序开发一个socket类,它将在QT框架中介绍我。当我尝试构建时,会出现以下错误:“this”对于静态成员函数不可用。 这是我的班级 #pragma once #include <QObject> class QTcpSocket; namespace Ps{ class InstSocket : public QObject { Q_OBJECT public: InstSocket(QObject *par

我正在为我的应用程序开发一个socket类,它将在QT框架中介绍我。当我尝试构建时,会出现以下错误:“this”对于静态成员函数不可用。 这是我的班级

#pragma once
#include <QObject>
class QTcpSocket;
namespace Ps{
    class InstSocket : public QObject
    {
        Q_OBJECT
    public:
        InstSocket(QObject *parent=0);
        bool Connect();
        bool isOpen();
        void Disconnect();

        //Geters
        QString GetHostName() const {return m_hostName;}
        quint16 GetPort() const {return m_port;}
        //seters
        void SetHostName(const QString& value);
        void SetPort(quint16 value);
        void SetLongWaitMs(int value){m_longWaitMs = value;}
        void SetShortWaitMs(int value){m_shortWaitMs = value;}
        void WriteData(const QString &data) const;

        ~InstSocket();
        QString ReadData() const;
    signals:
        static void NotifyConnected();
        static void NotifyDisconnected();

    private slots:
        void onConnected();
        void onDisconnected();

    private:
        //this holds a reference to QtcpSocket
        QTcpSocket& m_socket;
        QString m_hostName;
        quint16 m_port;
        int m_shortWaitMs;
        int m_longWaitMs;

        explicit InstSocket(const InstSocket& rhs) = delete;
        InstSocket& operator= (const InstSocket& rhs) = delete;
    };
}
当我点击它们时,QT creator将我带到moc_instsocket.cpp(位于build文件夹中)并指向:

    // SIGNAL 0
void Ps::InstSocket::NotifyConnected()
{
    QMetaObject::activate(this, &staticMetaObject, 0, Q_NULLPTR);
}

// SIGNAL 1
void Ps::InstSocket::NotifyDisconnected()
{
    QMetaObject::activate(this, &staticMetaObject, 1, Q_NULLPTR);
}

尽管我检查了好几次所有代码,但我还是不知道该怎么办。因为只有一些调试消息,所以不需要知道utils类。有人知道如何修复它吗?

静态信号的含义是什么?在Qt中,信号和插槽用于对象级别

signals:
    static void NotifyConnected();
    static void NotifyDisconnected();
从QObject或其子类(例如QWidget)继承的所有类可以包含信号和插槽。当对象以其他对象可能感兴趣的方式更改其状态时,信号由对象发出。这就是对象通信所做的一切。它不知道或不关心是否有任何东西正在接收它发出的信号。这是真正的信息封装,并确保对象可以用作软件组件


您已将信号
NotifyConnected
NotifyDisconnected
声明为
static
。不要认为这会起作用(而且几乎肯定不是您想要的)。效果很好。我试过了,但一开始不起作用…看起来我忘了清理我的项目。这是一篇关于这个小错误的长篇文章。谢谢帮助。虽然这是一篇关于信号和插槽的介绍性文章,但它没有解释为什么OP会收到提到的错误消息。信号是静态的是错误的原因。如何解释还可以解释吗?可以在答案中解释。好的答案应该是这样的。谢谢你的反馈。
    // SIGNAL 0
void Ps::InstSocket::NotifyConnected()
{
    QMetaObject::activate(this, &staticMetaObject, 0, Q_NULLPTR);
}

// SIGNAL 1
void Ps::InstSocket::NotifyDisconnected()
{
    QMetaObject::activate(this, &staticMetaObject, 1, Q_NULLPTR);
}
signals:
    static void NotifyConnected();
    static void NotifyDisconnected();