2 big shuozi big_shuozi 于 2016.03.10 13:08 提问

QComboBox 中三级联动设置省市区

图片说明
QComboBox 中三级联动设置省市区 我有一个txt文件里有各省市区的数据如图 但是我怎么去提取这些数据呢

2个回答

haobenhogo
haobenhogo   2016.03.10 22:55
已采纳

/*

  • 以下是思路,代码未测试,酌情参考 *
  • 可见序号是唯一,一个城市对应一个序号
  • 用一个QMap存储序号-城市对应关系
  • 再用一个QMap存储每个序号-子序号对应关系 *
  • QComboBox用的时候
  • 第一个QComboBox,提取idChildsMap--Key为0的 QList,从idNameMap,遍历进去
  • 第二个QComboBoX,以第一个QComboBox选的id为key从idChildsMap提取...遍历
  • 第三个以第二个选的id来.. *
  • void addItem(const QString & text, const QVariant & userData = QVariant())
  • QVariant currentData(int role = Qt::UserRole) const
  • QComboBox 插的时候 ,把id 作为第二个参数,这样选择的时候就可以取到城市对应的id了
    */
    void GetCity()
    {
    QMap idNameMap; //序号--名称
    QMap > idChildsMap; //序号--所有子序号

    QFile file("city.txt");

    if (file.open(QIODevice::ReadOnly))
    {
    file.readLine();
    file.readLine();

    //从第三行开始
    while (!file.atEnd())
    {
        QString strLine = file.readLine();
    
        //分为两部分 左边-id 右边-id:城市名
        QStringList firstSplits = strLine.split(":{");
    
        //以下提取 序号-名称 所有子序号
        QString strCity = firstSplits.last().remove("}");
        strCity = strCity.remove("‘");
        QSringList strCityList = strCity.split(",");
    
        QList<int> idList;
    
        for (int i = 0; i < strCityList.count(); ++i)
        {
            int id = strCityList.at(i).split(":").first().toInt();
            QString city = strCityList.at(i).split(":").last();
            idList << id;
            idNameMap.insert(id, city);
        }
    
        //以下提取 序号--所有子序号
        QString strId = firstSplits.first().remove("’");
        QStringList strIdList = strId.split(",");
    
        idChildsMap.insert(strIdList.last().toInt(), idList);
    }
    

    }
    }

haobenhogo
haobenhogo   2016.03.10 22:57

//不知为何没了
QMap< int, QString > idNameMap; //序号--名称
QMap< int, QList< int > > idChildsMap; //序号--所有子序号

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!