C++ QObject连接函数
我检查了其他类似的问题并尝试了它们的解决方案,但它们对我不起作用 我基本上是在尝试创建一个只发出post请求的http客户端。为此,我需要将C++ QObject连接函数,c++,qt,qt5,qt-signals,C++,Qt,Qt5,Qt Signals,我检查了其他类似的问题并尝试了它们的解决方案,但它们对我不起作用 我基本上是在尝试创建一个只发出post请求的http客户端。为此,我需要将QNetworkManager的完成信号连接到某个回调插槽 这是我的密码 h文件: cpp文件: 正如您所看到的,插槽肯定存在,并且在头文件的公共插槽下声明。所以我不知道为什么会这样。我已经尝试过清理、运行qmake和重建 错误消息是: “QObject::connect:没有这样的插槽QObject::finishedSlot(QNetworkReply
QNetworkManager
的完成信号连接到某个回调插槽
这是我的密码
h文件:
cpp文件:
正如您所看到的,插槽肯定存在,并且在头文件的公共插槽下声明。所以我不知道为什么会这样。我已经尝试过清理、运行qmake和重建
错误消息是:
“QObject::connect:没有这样的插槽QObject::finishedSlot(QNetworkReply
*)"
有什么想法吗?您可能忘了使用宏。每个实现自己的插槽/信号的类都需要该宏。不要忘记,您需要将头文件/源文件添加到.pro文件中。需要注意的一件事;因为您使用的是Qt5,所以有一个新的信号插槽连接语法,它允许您指定任何函数,而不仅仅是那些定义为插槽的函数 在这种情况下,您可以执行以下操作:-
connect(network_manager, &QNetworkAccessManager::finished, this, &Class1::finishedSlot);
这种语法的优点在于,您只需指定函数的地址,而不必关心参数,因此,如果在函数中更改它们,则不需要在connect语句中更新它们
你仍然应该使用Q_OBJECT宏,你可以阅读更多关于新语法的信息。我在这里分享另一个可能的问题,因为这篇文章是谷歌搜索中最热门的 除了添加
Q\u对象
,您还必须为自定义事件添加公共时段:
或公共Q\u时段:
。否则,您仍然会遇到QObject::connect:No-this-slot
错误
根据和,我在这里做一个简要的总结
若要解决“无此插槽”错误,必须检查
QObject
或任何来自QObject的派生类Q_对象
宏插槽
或Q_插槽
附加在活动的private/protected/public关键字之后class MyClass: public QObject { //check 1
Q_OBJECT //check 2
public slots: //check 3
void onEvent(int);
};
希望这能挽救其他人的生命注意,错误是QObject::finishedSlot。这意味着Qt不知道您的子类。这意味着没有生成关于它的元信息。这意味着
moc
没有在你的课堂上运行。这意味着您的类缺少Q_对象
宏。您不能忘记在“slots:”区域中指定插槽函数(在头文件中)。我还必须在添加了/qmake/rebuild之后进行清理。@Charlemagne:我认为,仅仅在项目上重新运行quake就足够了。这可以在大型项目上节省时间。您能告诉我们这样一个函数是否必须声明为静态的吗?该函数不需要是静态的,因为指向实例的指针会传递给connect调用。哇哇,您说得对!在&Class1::finishedSlot
之前,我们通过这个
。我只是忘记了我所有的Qt体验:)。@thedarknight:当然很有帮助。!该错误只是由于未使用此新语法。
connect(network_manager, &QNetworkAccessManager::finished, this, &Class1::finishedSlot);
class MyClass: public QObject { //check 1
Q_OBJECT //check 2
public slots: //check 3
void onEvent(int);
};