Qt QSystemNetworkInfo cellIdChanged (int) не излучает в устройстве - PullRequest
3 голосов
/ 01 ноября 2011

Я пытаюсь создать программу Qt, которая вызывает функцию всякий раз, когда изменяется сетевой CellId.

Вот мое объявление класса (я не показал некоторых членов вне рамок вопроса):

class Mgr:public QObject{
Q_OBJECT
public slots:
void onCidChange(int cell);
void NetworkStrengthChange(QSystemNetworkInfo::NetworkMode mode,int i);
public:QString mcc,mnc,cid,lac;
   QSystemNetworkInfo* networkInfo;
   Mgr();
};

В конструкторе:

networkInfo = new QSystemNetworkInfo();
mcc = networkInfo->currentMobileCountryCode();
qDebug()<<mcc; //I Get a proper debug output
mnc = networkInfo->currentMobileNetworkCode();
lac = QString::number(networkInfo->locationAreaCode());
cid = QString::number(networkInfo->cellId());
set("mccvar",mcc);  //set(QString,QString) is my own method to display information, and it works
set("mncvar",mnc);
set("lacvar",lac);
set("cidvar",cid);

В основной функции,

Mgr ob;
QObject::connect(ob.networkInfo, SIGNAL(cellIdChanged(int)), &ob, SLOT(onCidChange(int))); //The slot is never called even if cellid changes on device, but works on simulator
QObject::connect(ob.networkInfo, SIGNAL(networkSignalStrengthChanged(QSystemNetworkInfo::NetworkMode,int)),&ob,SLOT(NetworkStrengthChange(QSystemNetworkInfo::NetworkMode,int)));  //Works great

и я вижу динамически NetworkSignal, я имею в виду, что если сигнал равен 60%, в эту секунду он показывает 60 (с помощью моего метода set ()), если он равен 90%, то в следующую секунду он показывает 90 мгновенно. Это работает как в симуляторе Qt, так и на моем устройстве. (Поскольку определение слота обновляет отображаемое значение при изменении силы сети)

Но когда речь идет о клетке, клетка показывает, когда объект был построен и он остается там навсегда, даже если я перенесу свой телефон в другое место с другим cellid (проверено другим приложением), он останется тем, который был во время конструирования объекта. Но это хорошо работает в симуляторе Qt, если я изменяю cellid, слот вызывается. Я также попытался установить новое значение cellid, например set ("cidvar", newcidvalue) внутри определения слота, что я считаю необходимым. Но слот никогда не вызывается в устройстве, а работает в симуляторе Qt, как было сказано ранее. Так может ли кто-нибудь помочь мне, где я ошибаюсь, или альтернативные методы, чтобы обнаружить изменение в cellid?

Последнее, что я уже сделал, так как класс включает Q_OBJECT

...