問題是關於TUI C++庫https://github.com/gansm/finalcut。支持最終切割的表格/網格小部件?
- 什麼是展示一個關鍵的最好方法:在小部件值對?我使用FLabel對象(對於鍵和值使用不同的顏色)。但讓我繼續...
- 如何顯示鍵值對列表?
- 如果再推一下,我該如何展示一張桌子?任何計劃在未來支持它?
我使用最終切割版本0.3.0。
問題是關於TUI C++庫https://github.com/gansm/finalcut。支持最終切割的表格/網格小部件?
我使用最終切割版本0.3.0。
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仍在開發中)
在當前版本的最終切割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;
}