1

我目前正在创建一个应用程序来编辑在某个时间范围内发生的事件的并行列表。在模型/后端中有一个列表列表,其中子列表按顺序排列了所有项目。

每个事件都应该由一个字符串/字形(来自 ttf 字体)表示,并且每个文本行都应该像正常的文本行一样进行编辑,但它们的显示方式有一些例外。看这张图片:

例子

基本上每一行代表一行文本。每个事件都是一个字符/字形。所以它是一个文本编辑器?!不完全的

  1. 没有换行符
  2. 多条平行线
  3. 每个字形后面都有一个单独的空格(X 方向)
  4. 每个字形都可以单独“向上”和“向下”移动(Y方向)(也许是最重要的一点)
  5. 如果你删除一个字形,它右边的所有项目都往“左”走一步来缩小差距(就像在普通的文本编辑器中一样)。
  6. 如果您插入一个字形,则它右侧的所有项目都会“向右”走一步以创建要插入的间隙。

QGraphicsLinearLayout 涵盖了大多数这些点,但对于这种方法,它可能是错误的小部件/布局。你有什么建议吗?

4

1 回答 1

1

我建议尝试将QGraphicsScene您的事件设置为QGraphicText对象(或者可能是派生自 的类QGraphicText)。让每个人独立定位,但让他们知道他们行中的“下一个”事件,就像一个链表。然后,当插入或删除一个事件时,您可以快速执行该操作并(不幸的是,更慢)更新该行中其他事件的位置。如果只是将位置设置为上一项右侧的 X 像素,则此更新可能不会是太多代码,但它必须在修改后更新该行中的每个事件。

您可能会做一些事情,其中​​右侧的事件是当前事件的子事件,并将位置更新推送到 Qt。我不知道这是否会更有效,而且我不知道子树到底能有多深。

更新事件的 Y 位置(要求 4)应该很容易:只需更改其 Y 位置。

于 2011-08-05T18:48:40.837 回答