2017-02-23 21 views

回答

1

Final Cut沒有能夠處理鍵值存儲的小部件。如果有一個小部件直接顯示標準容器元素,而不必分別插入這些項目,那將會非常有趣。但是您可以使用關聯容器中的值填充FListBox小部件。

FListBox* list = new FListBox (this); 
list->setGeometry(1, 1, 7, 7); 

std::map<char,int> ascii; 
std::map<char,int>::iterator iter, begin, end; 

ascii['@'] = 0x40; 
ascii['A'] = 0x41; 
ascii['B'] = 0x42; 
ascii['C'] = 0x43; 
begin = ascii.begin(); 
end = ascii.end(); 

for (iter = begin; iter != end; ++iter) 
    list->insert (iter->second); 

// Jump in the list to item ascii['B'] 
int n = int(std::distance(begin, ascii.find('B'))); 
list->setCurrentItem(n+1); 

// Stupid indirect access: value that is mapped to key 'C'. 
n = int(std::distance(begin, ascii.find('C'))); 
FListBoxItem item = list->getItem(n+1); 
FMessageBox::info (this, "Value[C]", item.getText()); 

未來,還計劃一個名爲FListView的小部件。這裏可能有多個列。這應該允許您以表格形式顯示數據。

或者您克隆當前的git存儲庫並使用全新的FScrollView小部件。在這裏,您可以將多個FLabel小部件放置在可滾動的視口上。 (注意:FScrollView仍在開發中)

0

在當前版本的最終切割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; 
}