LVGL

cpp 复制代码
static void ui_wifi_populate_list(const std::vector<WifiApEntry>& entries)
{
    if (ui_wifi_list_container == NULL) {
        return;
    }

    lv_obj_clean(ui_wifi_list_container);
    if (entries.empty()) {
        lv_obj_t * empty_label = lv_label_create(ui_wifi_list_container);
        lv_label_set_text(empty_label, "未发现 WiFi");
        lv_obj_set_width(empty_label, lv_pct(100));
        lv_obj_set_style_text_align(empty_label, LV_TEXT_ALIGN_CENTER, LV_PART_MAIN | LV_STATE_DEFAULT);
        ui_wifi_apply_theme_to_label(empty_label);
        return;
    }

    for (const auto& entry : entries) {
        lv_obj_t * row = lv_button_create(ui_wifi_list_container);
        lv_obj_set_width(row, lv_pct(100));
        lv_obj_set_height(row, 72);
        lv_obj_set_style_bg_color(row, lv_color_hex(0xFFFFFF), LV_PART_MAIN );
        lv_obj_set_style_bg_color(row, lv_color_hex(0xFFFFFF), LV_STATE_DEFAULT );
        lv_obj_set_style_pad_hor(row, 16, LV_PART_MAIN);
        lv_obj_remove_flag(row, LV_OBJ_FLAG_SCROLLABLE);

        auto * row_data = new WifiApRowData();
        row_data->ssid = entry.ssid;
        row_data->authmode = entry.authmode;
        lv_obj_set_user_data(row, row_data);
        lv_obj_add_event_cb(row, ui_event_wifi_ap_clicked, LV_EVENT_CLICKED, NULL);
        lv_obj_add_event_cb(row, ui_event_wifi_ap_deleted, LV_EVENT_DELETE, NULL);

        lv_obj_t * ssid_label = lv_label_create(row);
        lv_obj_set_width(ssid_label, lv_pct(65));
        lv_label_set_long_mode(ssid_label, LV_LABEL_LONG_DOT);
        lv_label_set_text(ssid_label, entry.ssid.c_str());
        ui_wifi_apply_theme_to_label(ssid_label);
        lv_obj_align(ssid_label, LV_ALIGN_LEFT_MID, 0, 0);

        char meta[48];
        snprintf(meta, sizeof(meta), "%ddBm %s", entry.rssi, ui_wifi_auth_label(entry.authmode));
        lv_obj_t * meta_label = lv_label_create(row);
        lv_label_set_text(meta_label, meta);
        ui_wifi_apply_theme_to_label(meta_label);
        lv_obj_align(meta_label, LV_ALIGN_RIGHT_MID, 0, 0);
    }
}

像那种

lv_obj_t * row = lv_button_create(ui_wifi_list_container);

它本身是返回的一个指针,实际的内存在堆里面,

而且ui_wifi_list_container 父节点会有一份孩子的指针

后续删除的时候,可以对父节点进行操作即可。

lv_obj_t * row 被注销了也没有事情。

相关推荐
ysa0510303 小时前
【并查集】判环,深搜
数据结构·c++·算法·深度优先
weixin_423533995 小时前
c++类的继承学习-去中心化交易所(DEX)的“流动性池初始化与交易指令”设计
c++·学习·去中心化
会周易的程序员8 小时前
microLog:专为嵌入式与高可靠场景打造的高性能日志库
c++·物联网·日志·iot·aiot
unicrom_深圳市由你创科技9 小时前
数据库用SQLite还是SQL Server?工业数据存储选哪个?
c++
郝学胜_神的一滴9 小时前
CMake 037:宏传递流转机制与C++编译特性跨平台适配指南
c++·cmake
apocelipes2 天前
常用编程语言和库的正则表达式性能对比
c语言·c++·python·性能优化·golang·开发工具和环境
郝学胜_神的一滴3 天前
CMake 034:生成器表达式:解耦构建时序、精简分支逻辑的终极利器
c++·cmake
见过夏天4 天前
C++ 基础入门完全指南
c++
用户805533698035 天前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
BadBadBad__AK6 天前
线段树维护区间 k 次方和
c++·数学·算法·stl