В классе SelectLevel существует функция drawLevels(tgui::Gui& gui, sf::RenderWindow& window, string name), которая принимает указатель на окно и окно виджетов для библиотек SFML и TGUI соответственно.
void SelectLevel::drawLevels(tgui::Gui& gui, sf::RenderWindow& window, string name)
{
tgui::Label::Ptr levelTitle = std::make_shared<tgui::Label>();
levelTitle->setPosition(135, 92);
levelTitle->setTextSize(22);
levelTitle->setText(name);
gui.add(levelTitle);
}
Суть в том, что есть цикл:
SelelctLevel Level;
for (int i = 0; levelNameVector.size() > i; i++)
{
Level.drawLevels(gui, window, levelNameVector[i]);
}
Мне нужно применить функцию drawLevels, но при этом необходимо, чтобы название экземпляра, которая идёт после объявления типа tgui::Label::Ptr в функции drawLevels менялось в зависимости от номера итерации или хотя бы было уникальным. Как можно это реализовать?
Имя переменной тут вообще роли не играет, насколько можно заметить, если она объявлена внутри функции то она просуществует только до конца выполнения функции. Но т.к. она "shared" и добавлена в gui то в памяти останется, но без имени.
Если нужно будет получить доступ к этому лейблу, то нужно будет указать ему имя, и сделать его уникальным. https://tgui.eu/documentation/0.8/classtgui_1_1Gui.html#aa5148777e159aed6d08dca0602cf79da
void tgui::Gui::add ( const Widget::Ptr & widgetPtr, const sf::String & widgetName = "" )
Это не имя переменной, а имя виджета - строка. Далее можно получить доступ, передавая имя в функцию get. https://tgui.eu/documentation/0.8/classtgui_1_1Gui.html#a820f590c4cfbc9cc59a84ab51f0dff63
gui.add(levelTitle, "my_label1");
tgui::Label::Ptr levelTitle = gui.get("my_label1");
В итоге финальная функция выглядит так:
void SelectLevel::drawLevels(tgui::Gui& gui, sf::RenderWindow& window, int i, string name)
{
tgui::Label::Ptr levelTitle = std::make_shared<tgui::Label>();
levelTitle->setPosition(135, 92);
levelTitle->setTextSize(22);
levelTitle->setText(name);
gui.add(levelTitle, "levelLabel" + i);
}
for (int i = 0; levelNameVector.size() > i; i++)
{
drawLevel[i]->drawLevels(gui, window, i, levelNameVector[i]);
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
В Qt с XML файлами можно работать по разномуНапример с помощью DOM, SAX, QXmlStream(Reader-Writer)
Как отправить сообщение клиенту средствами winsock2? Пример отправляю сообщение на сервер, и нужно что-бы сервер ответил, принял ли message? Как реализовать...
здравствуйте, начинаю въезжать в ассемблер, придумываю себе простой код для примера: