ImGui::BeginCombo() 如何修改里面右侧的图标为自定义图标
时间: 2024-05-05 13:18:29 浏览: 16
你好,关于你的问题,可以通过修改 ImGui::Combo() 函数中的第三个参数来实现自定义图标,例如:
```
ImGui::Combo("MyCombo", ¤t_selected_item, items, items_count,
[](void* data, int idx, const char** out_text) -> bool
{
*out_text = items[idx];
return true;
}, nullptr);
```
其中,第五个参数是一个 lambda 表达式,用来设置每一个选项的图标。你需要在该 lambda 表达式中调用 ImGui::SameLine() 函数,将图标和文本对齐,再使用 ImGui::Image() 函数添加自定义图标,例如:
```
ImGui::Combo("MyCombo", ¤t_selected_item, items, items_count,
[](void* data, int idx, const char** out_text) -> bool
{
ImGui::SameLine();
ImGui::Image((void*)my_custom_icon_texture_id, ImVec2(16, 16), ImVec2(0, 0), ImVec2(1, 1), ImVec4(1, 1, 1, 1), ImVec4(1, 1, 1, 0));
ImGui::SameLine();
*out_text = items[idx];
return true;
}, nullptr);
```
其中,my_custom_icon_texture_id 为自定义图标的纹理 ID。如果你没有自己的图标纹理,可以使用 ImGui 自带的图标字体,使用 ImGui::IconsXXX() 函数添加图标,例如:
```
ImGui::Combo("MyCombo", ¤t_selected_item, items, items_count,
[](void* data, int idx, const char** out_text) -> bool
{
ImGui::SameLine();
ImGui::PushFont(ImGui::GetIO().Fonts->Fonts[1]); // 使用图标字体
ImGui::TextColored(ImVec4(1, 1, 1, 1), ICON_XX);
ImGui::PopFont();
ImGui::SameLine();
*out_text = items[idx];
return true;
}, nullptr);
```
其中,ICON_XX 为需要使用的图标的 Unicode 编码。希望能帮到你!