Problem with QMap
-
wrote on 25 May 2016, 12:38 last edited by
Hi all. I am using the class in the snippet below to pass several parameters to a function
#ifndef CST2220CONFIGPARAMETERMAP_H #define CST2220CONFIGPARAMETERMAP_H #include <QMap> #include <QString> #include <QDebug> #define MAC_KEY "mac" #define IP_KEY "ip" #define CST2220_APK_KEY "cst2220apk" #define BWS_APK_KEY "bwsapk" #define VIDEX_FOLDER_KEY "videx_folder" class Cst2220ConfigParameterMap : public QMap<const char *,QString> { public: Cst2220ConfigParameterMap( QString mac, QString ip, QString cst2220_apk_path, QString bws_apk_path, QString videx_folder_path); }; #endif // CST2220CONFIGPARAMETERMAP_H
I have a strange problem. I can retry the key-value pair only within the constructor and not from outside.
if( this->contains(MAC_KEY))...
return true.
Cst2220ConfigParameterMap par(mMacAddrMan->getMac(),mIpAddrMan->getIp(),pathCST2220Apk,pathBWSApk,pathVidexFolderApk); if( par.contains(MAC_KEY))
returns false!!!!
What am i doing wrong?
I'm getting crazy!
thank you for helping me
Cristiano Narcisi
-
@cristiano.narcisi said:
QMap
Hi
can you show the cpp of the constructor also?
How you add the items.Inheriting from Qmap is a bit funky for me as with STL that was normally
not super idea. but i dont know with QList. :) -
@cristiano.narcisi said:
QMap
Hi
can you show the cpp of the constructor also?
How you add the items.Inheriting from Qmap is a bit funky for me as with STL that was normally
not super idea. but i dont know with QList. :)wrote on 25 May 2016, 13:07 last edited bythanks @mrjj
here the constructor
Cst2220ConfigParameterMap::Cst2220ConfigParameterMap( QString mac,
QString ip,
QString cst2220_apk_path,
QString bws_apk_path,
QString videx_folder_path) : QMap(){this->insert(MAC_KEY,mac); this->insert(IP_KEY,ip); this->insert(CST2220_APK_KEY,cst2220_apk_path); this->insert(BWS_APK_KEY,bws_apk_path); this->insert(VIDEX_FOLDER_KEY,videx_folder_path);
}
-
Ok, it does look perfect valid.
have you tried
qDebug() << size(); (in ctor)
and
qDebug() << par.size(); (right after u define par) -
Ok, it does look perfect valid.
have you tried
qDebug() << size(); (in ctor)
and
qDebug() << par.size(); (right after u define par)wrote on 25 May 2016, 13:13 last edited byOk. But what does it happen when the function is contains(..key..)?
-
Ok. But what does it happen when the function is contains(..key..)?
@cristiano.narcisi
it looks like outside of constructor the key list is no more.
i wanted to see if it says
zero for par. -
@cristiano.narcisi
it looks like outside of constructor the key list is no more.
i wanted to see if it says
zero for par.wrote on 25 May 2016, 13:22 last edited byOk but it is very strange. I give you another information: i can view all the key-value pair stored into the par variable using the watches of the editor!!!!
-
Ok but it is very strange. I give you another information: i can view all the key-value pair stored into the par variable using the watches of the editor!!!!
@cristiano.narcisi
OK ?!?! That also pretty strange.what about size inside and out?
-
@cristiano.narcisi
OK ?!?! That also pretty strange.what about size inside and out?
wrote on 25 May 2016, 13:38 last edited bySize outside the ctor is correct. It is 5!!!
-
wrote on 25 May 2016, 13:45 last edited by
Using the iteartor i can view all the values stored in the QMap .... Probably i don't understand something of very important about how QMap acceses the data.
//your code hereQMap<const char *, QString>::ConstIterator ii; for( ii = par.constBegin(); ii != par.constEnd(); ++ii ) qDebug() << ii.key() << " = " << ii.value();```
-
Size outside the ctor is correct. It is 5!!!
@cristiano.narcisi
ok ?!?I think you should try dump the list using par to see if key corruption
else there is no reason contains should not work. -
@cristiano.narcisi
ok ?!?I think you should try dump the list using par to see if key corruption
else there is no reason contains should not work.wrote on 25 May 2016, 14:18 last edited byProbably i have understood why i can retry the key. The problem is that i am using
QMap< const char *, QString>
This means that the key is a POINTER and not the text !!!
I have replaced the QMap template with
QMap< QString, QString>
Now the key is an ITEM and not a POINTER and i can find all the keys and the value stored within the QMap.
Sorry for bothering you
Thanks for hepling me
Regards
Cristiano Narcisi
-
@cristiano.narcisi said:
QMap
Hi
can you show the cpp of the constructor also?
How you add the items.Inheriting from Qmap is a bit funky for me as with STL that was normally
not super idea. but i dont know with QList. :)Inheriting from Qmap is a bit funky
It's specially noted in the docs that deriving from a container specialization is not recommended. That's probably what seems funky ;)
-
Probably i have understood why i can retry the key. The problem is that i am using
QMap< const char *, QString>
This means that the key is a POINTER and not the text !!!
I have replaced the QMap template with
QMap< QString, QString>
Now the key is an ITEM and not a POINTER and i can find all the keys and the value stored within the QMap.
Sorry for bothering you
Thanks for hepling me
Regards
Cristiano Narcisi
@cristiano.narcisi
ok so
#define MAC_KEY "mac"
used as key did funky stuff?good found :)
-
@cristiano.narcisi
ok so
#define MAC_KEY "mac"
used as key did funky stuff?good found :)
@mrjj said:
used as key did funky stuff?
The only funky stuff with that macro is that
char *
doesn't have a meaningfuloperator <
, which is required for it to be a key in the map. The comparison is done as you'd compare integers.
7/15