QML获取c++传过来的qstringlist更新到listmodel里

c++通过wpa_cli命令获取扫描到的wifi,把扫描到的wifi列表传递给QML进行显示

c++部分代码:

QProcess process;
    int validSsidCount = 0;
    process.start("wpa_cli", QStringList() << "scan");
    process.waitForFinished();

    QThread::sleep(3);

    process.start("wpa_cli", QStringList() << "scan_results");
    process.waitForFinished();

    QString output = process.readAllStandardOutput();
    QStringList lines = output.split("\n", Qt::SkipEmptyParts);

    qDebug() << "扫描到的 Wi-Fi 网络:";
    for (const QString &line : lines) {
        QStringList fields = line.split(QRegularExpression("\\s+"));
        if (fields.size() > 4) {
            QString ssid = fields[4];
            // 检查SSID是否为空、长度是否大于20或是否等于"signal"
            if (ssid.isEmpty() || ssid.length() > 20 || ssid == "signal") {
                continue;  // 如果不满足条件,跳过此循环
            }
            m_ssidList.append(ssid);
            qDebug() << "WIFI: " << ssid;  // 打印有效的 SSID
            validSsidCount++;  // 计数有效的 SSID
        }
    }
    emit ssidListChanged(m_ssidList);

把获取到的wifi列表通过信号传递出去,QML里再接收这个信号

QML代码:

main.qml:

ListModel {
        id:wlanmodel
    }
Connections {
        target: providers

        onSsidListChanged: {
            wlanmodel.clear(); // 清空现有模型
            var wlist = providers.refreshSsidList()
            for (var i = 0; i < ssidList.length; i++) {
                wlanmodel.append({"name": ssidList[i]}); // 添加新的 SSID
                console.log("name: ",ssidList[i]);
            }
        }
    }
需要显示的地方:
ListView {
           id: myListView
            width: parent.width // 使 ListView 的宽度与 ColumnLayout 相同
            height: 200 // 设定 ListView 的高度

            model: wlanmodel

            delegate: Item {
                width: myListView.width
                height: 40 // 每个列表项的高度
                Text {
                    text: model.name
                    anchors.verticalCenter: parent.verticalCenter
                }
            }
 }

target后面跟创建的c++的类对象,onSsidListChanged是监听ssidListChanged这个信号,要加on,信号第一个字母大写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值