文本文件 city.txt 格式如下:
編號:{子編號:城市名,子編號:城市名...}
QMap idNameMap; // 編號 -> 名稱
QMap> idChildsMap; // 編號 -> 子編號列表
void GetCity() {
QFile file("city.txt");
if (file.open(QIODevice::ReadOnly)) {
file.readLine(); // 跳過前兩行
file.readLine();
while (!file.atEnd()) {
QString strLine = file.readLine().trimmed();
QStringList firstSplits = strLine.split(":{");
if (firstSplits.size() != 2) continue;
// 解析子項:子編號:城市名
QString strCity = firstSplits[1].remove("}").remove("'");
QStringList cityList = strCity.split(",");
QList childIds;
for (const QString& item : cityList) {
QStringList kv = item.split(":");
if (kv.size() == 2) {
int id = kv[0].toInt();
QString name = kv[1];
childIds.append(id);
idNameMap.insert(id, name);
}
}
// 解析父編號
QStringList idParts = firstSplits[0].split(",");
if (!idParts.isEmpty()) {
int parentId = idParts.last().toInt();
idChildsMap.insert(parentId, childIds);
}
}
file.close();
}
}
idChildsMap[0] 作為省份列表,填充 comboBox1comboBox1 選中的 ID,獲取 idChildsMap[id] 填充 comboBox2comboBox2 選中 ID 填充 comboBox3// 存儲 ID 作為 userData
comboBox->addItem(name, id);
// 獲取選中項 ID
int currentId = comboBox->currentData(Qt::UserRole).toInt();
代碼未經測試,需根據實際數據格式調整分割符。建議將解析邏輯封裝為單獨類,UI 層僅負責聯動調用。