У меня есть объект wxScrolledWindow, заполненный элементами (изображениями) (каждый элемент добавляет класс ThumbNail, который использует dc.paint). Я хотел бы динамически изменять элементы с помощью нового раза (не одного и того же числа) (изменение папки пользователем).wxScrolledWindow добавить и удалить элементы
Как я могу удалить все элементы в объекте wxScrolledWindow и снова добавить новый? А затем сбросьте полосы прокрутки.
_ScrolThumbs = new wxScrolledWindow(_pMainPanel);
wxGridSizer *m_swSizer = new wxGridSizer(1,1,0);
_ScrolThumbs->SetSizer(m_swSizer); // Sets the window to have the given layout sizer.
std::vector<ThumbNail*> _Thumbs;
for(int i=0;i < FilePr::Instance()->GetNumThumbs() ;i++)
{
_Thumbs.push_back(new ThumbNail(_ScrolThumbs, PicName[i]));
_ScrolThumbs ->GetSizer()->Add (_Thumbs[i], 1, wxALL|wxALIGN_CENTER_VERTICAL, 5);
}
Затем я попытался сделать это (когда кнопка хит):
wxWindowList& lst = _ScrolThumbs->GetChildren();
//if (!lst.empty())
std::cout << lst.size() << '\n';
while(!lst.empty()) //for(int i = 0; i < lst.size(); i++) //lst.size()
{
wxWindow *wnd = lst.back();
wnd->Destroy();
}
Но положить новые элементы обратно, как я выше не работает ...
Любой идеи, как это сделать или найти помощь в Интернете? Благодаря!
'lst.back()' не удаляет последний элемент из списка; вам также нужно сделать 'pop_back()'. Цикл 'while' будет бесконечным циклом, насколько я могу судить (или вызовет беспорядок, вызывающий' Destroy' на том же указателе несколько раз). Вместо этого вы должны удалить дочерние элементы из sizer: просто сделайте '_ScrolThumbs -> GetSizer() -> Clear (true);'. После добавления новых детей создайте '_ScrolThumbs-> Layout();'. Я не знаю, насколько это поможет, поскольку вы не дали достаточной информации о том, что означает «не работает». Я могу поставить их в ответ, если это поможет. – bogdan
Off topic: использование идентификаторов, начинающихся с подчеркивания и заглавной буквы, является незаконным в C++ в коде пользователя - они зарезервированы для реализации. – bogdan
Спасибо LOT !! это делает трюк :). Я проверю «_». Я подхватил это неправильно. (Извините, я не могу дать вам правильный ответ). Существуют ли правила хорошей практики написания кода? –