0

なぜそれが起こっているのか、私には手がかりがありません。QObjectマクロを拡張して追加しましたQ_OBJECT。また、シグナルとスロットは両方とも同じパラメーターを持ちます。

元の質問を投稿しました

http://supportforums.blackberry.com/t5/Cascades-Development/Object-connect-No-such-slot-problem/mp/2486753

これは私の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 ドキュメントのリンクはこちら

ありがとう。

4

2 に答える 2

7

どこでも同じ名前を使用する必要があります: シグナル宣言、スロット宣言、および接続。これは、connect()メカニズムがテキスト比較に基づいているためです。

元のシグナルはconst QGeoPositionInfo &as パラメータのみで宣言されているため、これとこれだけを設定する必要があります。

使用する必要がある宣言は次のとおりです。

    // 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&)));

QtMobilitySubsetヘッダーで名前空間を使用する必要があることに注意してください。これは悪いことです。using ::QtMobilitySubset::QGeoPositionInfo;完全なusing namespace QtMobilitySubset;.

于 2013-07-19T12:18:34.760 に答える
2

この変数を取るようにスロットを宣言していますQtMobilitySubset::QGeoPositionInfo &infoが、connect指定すると、QGeoPositionInfo &代わりに取ることができます。あなたがそれらを宣言したように、あなたはあなたの声明QtMobilitySubset::QGeoPositionInfo &を持っている必要があります.QtMobilitySubsetconnect

于 2013-07-19T10:21:02.833 に答える