QT信号错误:“;这";对于静态成员函数不可用
我正在为我的应用程序开发一个socket类,它将在QT框架中介绍我。当我尝试构建时,会出现以下错误:“this”对于静态成员函数不可用。 这是我的班级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
#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();