현재 최종 버전의 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;
}