在最终切割中支持表/网格小部件

Support for table/grid widget in final-cut?

本文关键字:网格 小部 支持      更新时间:2023-10-16

问题是关于tui c 库https://github.com/gansm/finalcut.

  • 显示钥匙的最佳方法是什么:小部件中的值对?我暂时将其使用的标签对象(具有钥匙和值的不同颜色)。但是让我继续...
  • 如何显示关键的列表:值对?
  • 再推动它,我该如何显示桌子?有任何计划在将来支持它吗?

我使用最终剪切版本0.3.0。

最终切割没有能够处理钥匙值商店的小部件。拥有一个小部件直接显示标准容器元素而无需单独插入项目真的很有趣。但是您可以用关联容器中的值填充flistbox小部件。

using namespace finalcut;
FListBox*  list = new FListBox (this);
list->setGeometry(FPoint(1, 1), FSize(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小部件。在这里,您可以将几个标签小部件放在可滚动的视口上。(当心:FSCrollview仍在开发中)

在最终剪切git存储库的当前版本中,flistbox小部件能够从STL容器中导入数据。您可以直接导入有关插入的数据,也可以在以后通过"懒惰转换"第一次访问。您需要的所有辅助功能。

直接导入

#include <final/final.h>
using namespace finalcut;
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 (FPoint(30, 2), FSize(22, 22));
  FListBox list (&dialog);
  list.setText ("Direct import");
  list.setGeometry (FPoint(1, 1), FSize(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>
using namespace finalcut;
// Lazy conversion helper functions
void IntToString (FListBoxItem& item, FDataAccess* container, int index)
{
  auto& vec = flistboxhelper::getContainer<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 (FPoint(30, 2), FSize(22, 22));
  FListBox list (&dialog);
  list.setText ("Lazy conversion");
  list.setGeometry (FPoint(1, 1), FSize(20, 19));
  int n = 0;
  std::vector<int> v(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();
  return ret;
}

上次修改:即将发布的版本0.7.0

更改代码更改