自定义Qmap的key类以去掉Qmap的自动排序功能
我想去掉Qmap的自动排序功能,于是自定义了一个类作为Qmap的key,并重新实现了该类的operator<()。程序编译运行没问题,但运行结果却不符合预期,大家帮忙看看问题出在哪里。
=========类定义:
class Config : public QDialog
{
Q_OBJECT
public:
explicit Config(QWidget *parent = 0);
class MapKey : public QString
{
public:
MapKey(){}
MapKey(const char *str):QString(str){}
MapKey(const QString &str):QString(str){}
bool operator < (const MapKey&) const {return true;}
};
typedef QMap<MapKey, QString> ConfigItems;
struct ConfigSection{
QString caption;
ConfigItems items;
};
typedef QMap<MapKey, ConfigSection> Configuration;
……
}
使用:
ConfigSection section;
section.caption = "[general]";
ConfigItems& items = section.items;
items["isSearchOnStart"] = QString("0"); // 设置值为0
conf[section.caption] = section;
ConfigSection& t = conf.begin().value();
qDebug()<<t.items.begin().key(); // 打印key,应为"isSearchOnStart"
qDebug()<<t.items.begin().value(); // 打印value,应为“0”
qDebug()<<t.items["isSearchOnStart"]; // 打印value,应为“0”
实际打印结果:
E:\Sissi\SVN\Qt\build-RemoteDisplayer-在本地运行-Debug\debug\RemoteDisplayer 启动中...
"isSearchOnStart"
"0"
"" // 此处期望的是"0"
为什么qDebug()<<t.items["isSearchOnStart"];打印出来的是""而不是"0"呢?问题出在哪?