我目前正在创建一个应用程序来编辑在某个时间范围内发生的并行事件列表。在模型/后端中有一个列表列表,其中子列表按顺序包含所有项目。
每个事件都应该由字符串/字形(来自 ttf 字体)表示,并且每个文本行都应该像普通文本行一样进行编辑,但有一些异常(exception)的显示方式。看这张图:
基本上每一行代表一行文本。每个事件都是一个字符/字形。所以它是一个文本编辑器?!不完全是
- 没有换行符
- 多条线并行
- 每个字形后面都有一个单独的空格(X 方向)
- 每个字形都可以单独“向上”和“向下”移动(Y 方向)(也许是最重要的一点)
- 如果删除字形,其右侧的所有项目都会向“左”移动一步以缩小间隙(就像在普通文本编辑器中一样)。
- 如果您插入字形,则其右侧的所有项目都会“向右”移动一步以创建要插入的间隙。
其中大部分要点都由 QGraphicsLinearLayout 涵盖,但对于这种方法来说,它可能是错误的小部件/布局。您有什么建议吗?
最佳答案
我建议尝试将您的事件设置为QGraphicsScene
作为QGraphicText
对象(或者可能是从QGraphicText
派生的类)。让每个人独立定位,但让他们知道他们所在行的“下一个”事件,就像链接列表一样。然后,当插入或删除一个事件时,您可以快速执行该操作并(不幸的是,速度更慢)更新该行中其他事件的位置。如果只是将位置设置为前一项右侧 X 像素,则此更新可能不会有太多代码,但修改后必须更新该行中的每个事件。
您也许可以做一些事情,其中右侧的事件是当前事件的子事件,并将位置更新推送到 Qt。我不知道这是否会更有效,而且我不知道子树到底能有多深。
更新事件的 Y 位置(要求 4)应该很容易:只需更改其 Y 位置即可。
关于python - 如何创建具有并行的多行字形/文本的 GUI,其中字形具有 x 和 y 坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6954633/