首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Qt QComboBox 實現省市區三級聯動完整方案

     編輯:程式設計疑難解答

數據格式假設

文本文件 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();
    }
}

三級聯動邏輯

  1. 第一級:獲取 idChildsMap[0] 作為省份列表,填充 comboBox1
  2. 第二級:根據 comboBox1 選中的 ID,獲取 idChildsMap[id] 填充 comboBox2
  3. 第三級:同理根據 comboBox2 選中 ID 填充 comboBox3

關鍵 API 使用

// 存儲 ID 作為 userData
comboBox->addItem(name, id);

// 獲取選中項 ID
int currentId = comboBox->currentData(Qt::UserRole).toInt();

完整示例參考

代碼未經測試,需根據實際數據格式調整分割符。建議將解析邏輯封裝為單獨類,UI 層僅負責聯動調用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved