В текущей версии репозитория git окончательного ребра виджет FListBox может импортировать данные из контейнера STL. Вы можете импортировать данные непосредственно при вставке или позже при первом доступе через «ленивое преобразование». Все, что вам нужно, - это небольшая вспомогательная функция.
Прямой импорт
#include <final/final.h>
static FString* temp_str = 0;
// Direct import helper functions
FString& IntToString (std::vector<int>::const_iterator iter)
{
return temp_str->setNumber(*iter);
}
int main (int argc, char* argv[])
{
FApplication app(argc, argv);
FDialog dialog ("List example", &app);
dialog.setGeometry (30, 2, 22, 22);
FListBox list (&dialog);
list.setText ("Direct import");
list.setGeometry (1, 1, 20, 19);
int n = 0;
temp_str = new FString;
std::vector<int> v(100,0);
std::vector<int>::iterator iter = v.begin();
while (iter != v.end())
{
n++;
*iter = n;
++iter;
}
list.insert (v.begin(), v.end(), IntToString);
delete temp_str;
app.setMainWidget(&dialog);
dialog.show();
return app.exec();
}
Импорт через ленивого преобразования
#include <final/final.h>
// Lazy conversion helper functions
void IntToString (FListBoxItem& item, FWidget::data_ptr container, int index)
{
std::vector<int>* vec = static_cast<std::vector<int>*>(container);
int n = (*vec)[index];
item.setText (" " + FString().setNumber(n));
}
int main (int argc, char* argv[])
{
FApplication app(argc, argv);
FDialog dialog ("List example", &app);
dialog.setGeometry (30, 2, 22, 22);
FListBox list (&dialog);
list.setText ("Lazy conversion");
list.setGeometry (1, 1, 20, 19);
int n = 0;
std::vector<int>* v = new std::vector<int>(100,0);
std::vector<int>::iterator iter = v->begin();
while (iter != v->end())
{
*iter = n;
(n%2 != 0) ? n++ : n+=3;
++iter;
}
list.insert (v, IntToString);
app.setMainWidget(&dialog);
dialog.show();
int ret = app.exec();
delete v;
return ret;
}