Вопрос ImGui vector

Пользователь
Статус
Оффлайн
Регистрация
19 Янв 2019
Сообщения
348
Реакции[?]
99
Поинты[?]
6K
Собственно, интересуюсь следующей реализацией.
Имеется вот такой код:
C++:
enum LevelOfSecrecy
{
    Bad,
    Сritical,
    Essential,
    Secret
};

struct PCObjects
{
    ImVec2 object_size;
    LevelOfSecrecy object_level;
};

std::vector<PCObjects> DataObjects;

void UpdateItems()
{
    for (int i = 0; i < DataObjects.size(); i++)
    {
        std::string object_name = "Object" + std::to_string(i);
        ImGui::Button(object_name.c_str(), DataObjects[i].object_size);
    }
}

void AddItem()
{
    DataObjects.push_back({ImVec2(250,35), static_cast<LevelOfSecrecy>(rand() % Secret)});
    UpdateItems();
}
Далее, уже непосредственно в меню имеется кнопка, где через if вызывается метод AddItem:
C++:
 if (ImGui::Button("Add object", ImVec2(vMax.x, 35)))
        {
            AddItem();
        }
При тестировании, нажатии на кнопку Add object Добавляется кнопка, с каждым кликом на форме их становится больше. Однако, они исчезают, просто потому что данный метод срабатывает при КЛИКЕ, и естественно эти добавленные кнопки будут исчезать на форме. Так вот вопрос, каким образом можно сделать так, чтобы они не исчезали, используя именно эту кнопку? И самое главное, не используя какие либо другие элементы ImGui ( к примеру CheckBox, хотя вроде бы работает он аналогично )
 
Последнее редактирование:
Участник
Статус
Оффлайн
Регистрация
15 Янв 2021
Сообщения
492
Реакции[?]
289
Поинты[?]
79K
А не вариант просто выводить эти кнопки в другом месте ? В другом Child'е например
 
Пользователь
Статус
Оффлайн
Регистрация
19 Янв 2019
Сообщения
348
Реакции[?]
99
Поинты[?]
6K
А не вариант просто выводить эти кнопки в другом месте ? В другом Child'е например
Ну, кстати как вариант)
C++:
 if (ImGui::Button("Add object", ImVec2(vMax.x, 35)))
        {
            AddItem();
        }

        ImGui::BeginChild("1", ImVec2(vMax.x, 150), true);
        {
            UpdateItems();
        }
        ImGui::EndChild();
1653406165289.png
 
Эксперт
Статус
Оффлайн
Регистрация
31 Авг 2018
Сообщения
1,792
Реакции[?]
1,073
Поинты[?]
29K
Собственно, интересуюсь следующей реализацией.
Имеется вот такой код:
C++:
enum LevelOfSecrecy
{
    Bad,
    Сritical,
    Essential,
    Secret
};

struct PCObjects
{
    ImVec2 object_size;
    LevelOfSecrecy object_level;
};

std::vector<PCObjects> DataObjects;

void UpdateItems()
{
    for (int i = 0; i < DataObjects.size(); i++)
    {
        std::string object_name = "Object" + std::to_string(i);
        ImGui::Button(object_name.c_str(), DataObjects[i].object_size);
    }
}

void AddItem()
{
    DataObjects.push_back({ImVec2(250,35), static_cast<LevelOfSecrecy>(rand() % Secret)});
    UpdateItems();
}
Далее, уже непосредственно в меню имеется кнопка, где через if вызывается метод AddItem:
C++:
 if (ImGui::Button("Add object", ImVec2(vMax.x, 35)))
        {
            AddItem();
        }
При тестировании, нажатии на кнопку Add object Добавляется кнопка, с каждым кликом на форме их становится больше. Однако, они исчезают, просто потому что данный метод срабатывает при КЛИКЕ, и естественно эти добавленные кнопки будут исчезать на форме. Так вот вопрос, каким образом можно сделать так, чтобы они не исчезали, используя именно эту кнопку? И самое главное, не используя какие либо другие элементы ImGui ( к примеру CheckBox, хотя вроде бы работает он аналогично )
Ты должен вызывать UpdateItems вне проверки if(ImGui::Button())
 
Сверху Снизу