我不知道为什么会这样。我扩展了 QObject
并添加了宏 Q_OBJECT
。信号和槽也有相同的参数。
我已经发布了原始问题
这是我的 hpp 文件:
/*
* LocationMonitor.hpp
*
* Created on: Jul 13, 2013
* Author: Roland
*/
#ifndef LOCATIONMONITOR_HPP_
#define LOCATIONMONITOR_HPP_
#include <QObject>
#include <QtLocationSubset/qgeopositioninfo.h>
#include <QtLocationSubset/qgeoareamonitor.h>
using namespace Qt;
using namespace QtMobilitySubset;
class GeoNotification;
class LocationMonitor : public QObject
{
Q_OBJECT
public:
LocationMonitor(int id,GeoNotification *geoNotification,QVariantList locationList,QVariantList actionList);
virtual ~LocationMonitor();
public slots:
void areaEnteredd(QtMobilitySubset::QGeoPositionInfo info);
void areaExitedd(QtMobilitySubset::QGeoPositionInfo info);
public:
QGeoAreaMonitor *monitor;
};
#endif /* LOCATIONMONITOR_HPP_ */
这是我的cpp文件
/*
* LocationMonitor.cpp
*
* Created on: Jul 13, 2013
* Author: Roland
*/
#include "LocationMonitor.hpp"
LocationMonitor::LocationMonitor(int id,GeoNotification *geoNotification,QVariantList locationList,QVariantList actionList):
geoNotification(geoNotification)
{
monitor = QGeoAreaMonitor::createDefaultMonitor(this);
QObject::connect(monitor, SIGNAL(areaEntered(QGeoPositionInfo)),this, SLOT(areaEnteredd(QGeoPositionInfo)));
QObject::connect(monitor, SIGNAL(areaExited(QGeoPositionInfo)),this, SLOT(areaExitedd(QGeoPositionInfo)));
}
LocationMonitor::~LocationMonitor() {}
void LocationMonitor::areaEnteredd(QGeoPositionInfo info)
{
}
void LocationMonitor::areaExitedd(QGeoPositionInfo info)
{
}
API 文档链接在 here 中
谢谢。
最佳答案
您需要在所有地方使用相同的名称:在信号声明中、在插槽声明中和在连接中。这是因为 connect()
机制是基于文本比较的。
由于原始信号仅使用 const QGeoPositionInfo &
作为参数声明,因此您需要设置它,而且也只需要设置它。
以下是您应该使用的声明:
// Header
public slots:
void areaEnteredd(const QGeoPositionInfo& info);
void areaExitedd(const QGeoPositionInfo& info);
// CPP
void LocationMonitor::areaEnteredd(const QGeoPositionInfo& info)
{
}
void LocationMonitor::areaExitedd(const QGeoPositionInfo& info)
{
}
// Connects
QObject::connect(monitor, SIGNAL(areaEntered(const QGeoPositionInfo&)),this, SLOT(areaEnteredd(const QGeoPositionInfo&)));
QObject::connect(monitor, SIGNAL(areaExited(const QGeoPositionInfo&)),this, SLOT(areaExitedd(const QGeoPositionInfo&)));
请注意,您必须在 header 中使用 QtMobilitySubset
命名空间,这很糟糕。您可以将范围限制在您真正需要的范围内:using::QtMobilitySubset::QGeoPositionInfo;
而不是完整的 using namespace QtMobilitySubset;
。
关于c++ - QObject :connect No such slot issue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17743636/