• 5677阅读
  • 3回复

[提问]这个问题不知道如何更好解决 [复制链接]

上一主题 下一主题
离线chuong
 

只看楼主 正序阅读 楼主  发表于: 2013-01-06
我用继承QStringList来实现Key-Value类,代码如下

  1. #ifndef QKEYVALUELIST_H
  2. #define QKEYVALUELIST_H
  3. #include <QStringList>
  4. class QKeyValueList : public QStringList
  5. {
  6. public:
  7.     void append(const QString &key, const QString &value)
  8.     {
  9.         if(QStringList::contains(key)){
  10.             int i = QStringList::indexOf(key);
  11.             ValueList[i] = value;
  12.         }else{
  13.             QStringList::append(key);
  14.             ValueList.append(value);
  15.         }
  16.     }
  17.     QStringList keys()
  18.     {
  19.         QStringList keyList;
  20.         for(int i =0; i <= QStringList::size() - 1; i++){
  21.             keyList.append(QStringList::at(i));
  22.         }
  23.         return keyList;
  24.     }
  25.     QStringList values()
  26.     {
  27.         return ValueList;
  28.     }
  29.     void removeOfKey(const QString &key)
  30.     {
  31.         if(QStringList::contains(key)){
  32.             int i = QStringList::indexOf(key);
  33.             ValueList.removeAt(i);
  34.             QStringList::removeAt(i);
  35.         }
  36.     }
  37.     QString key(const int &i)
  38.     {
  39.         if(QStringList::size()>0){
  40.             if((0<=i)&&(i<=QStringList::size()-1)){
  41.                 return QStringList::at(i);
  42.             }else{
  43.                 return NULL;
  44.             }
  45.         }else{
  46.             return NULL;
  47.         }
  48.     }
  49.     QString value(const int &i)
  50.     {
  51.         if(QStringList::size()>0){
  52.             if((0<=i)&&(i<=QStringList::size()-1)){
  53.                 return ValueList.at(i);
  54.             }else{
  55.                 return NULL;
  56.             }
  57.         }else{
  58.             return NULL;
  59.         }
  60.     }
  61.     QString valueOfKey(const QString &key)
  62.     {
  63.         if(QStringList::contains(key)){
  64.             int i = QStringList::indexOf(key);
  65.             return ValueList.value(i);
  66.         }else{
  67.             return NULL;
  68.         }
  69.     }
  70. private:
  71.     QStringList     ValueList;
  72. };
  73. #endif //QKEYVALUELIST_H



其中keys方法是用QStringlist返回所有key值,实际上QkeyvalueList的父类就是,但是我没找到方法,暂时用遍历实现。
离线roywillow

只看该作者 3楼 发表于: 2013-01-07
你是在实现QMap和QHash的功能?
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线jdwx

只看该作者 2楼 发表于: 2013-01-07
木有明白是什么意思,key-value是map的强项。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线chuong

只看该作者 1楼 发表于: 2013-01-06
自己改了一下,看起来满意了。

  1. #ifndef QKEYVALUELIST_H
  2. #define QKEYVALUELIST_H
  3. #include <QList>
  4. #include <QStringList>
  5. class QKeyValueList : public QList<QString>
  6. {
  7. public:
  8.     void append(const QString &key, const QString &value)
  9.     {
  10.         if(QList<QString>::contains(key)){
  11.             int i = QList<QString>::indexOf(key);
  12.             ValueList[i] = value;
  13.         }else{
  14.             QList<QString>::append(key);
  15.             ValueList.append(value);
  16.         }
  17.     }
  18.     QStringList keys()
  19.     {
  20.         return QStringList::fromStdList(QList<QString>::toStdList());
  21.     }
  22.     QStringList values()
  23.     {
  24.         return QStringList(ValueList);
  25.     }
  26.     void removeOfKey(const QString &key)
  27.     {
  28.         if(QList<QString>::contains(key)){
  29.             int i = QList<QString>::indexOf(key);
  30.             ValueList.removeAt(i);
  31.             QList<QString>::removeAt(i);
  32.         }
  33.     }
  34.     QString key(const int &i)
  35.     {
  36.         if(QList<QString>::size()>0){
  37.             if((0<=i)&&(i<=QList<QString>::size()-1)){
  38.                 return QList<QString>::at(i);
  39.             }else{
  40.                 return NULL;
  41.             }
  42.         }else{
  43.             return NULL;
  44.         }
  45.     }
  46.     QString value(const int &i)
  47.     {
  48.         if(QList<QString>::size()>0){
  49.             if((0<=i)&&(i<=QList<QString>::size()-1)){
  50.                 return ValueList.at(i);
  51.             }else{
  52.                 return NULL;
  53.             }
  54.         }else{
  55.             return NULL;
  56.         }
  57.     }
  58.     QString valueOfKey(const QString &key)
  59.     {
  60.         if(QList<QString>::contains(key)){
  61.             int i = QList<QString>::indexOf(key);
  62.             return ValueList.value(i);
  63.         }else{
  64.             return NULL;
  65.         }
  66.     }
  67. private:
  68.     QList<QString>  ValueList;
  69. };
  70. #endif //QKEYVALUELIST_H

快速回复
限100 字节
 
上一个 下一个