Qt - 子类化为文本小部件提供替代视图?

时间:2011-06-15 18:50:45

标签: qt widget subclass qtextedit

目前,我正处于Qt小部件的设计阶段,就像在典型的十六进制编辑器中看到的那样。这开始似乎很简单,但是当我深入研究它的实现细节时,我有些困惑。

基本上,小部件由3个核心组件组成:它将继承QAbstractScrollArea或QScrollArea以提供滚动,并且在视口边距中,它将显示每行的文件偏移量。然后会有两个文本编辑器;一个具有文件每个字节的十六进制值,一个具有明文字符表示。

当然,我首先检查qt-apps.org是否有任何现有的小部件,但搜索“hex”只返回QHexEdit和qPHexEditor,两者都不是很完整。然后我考虑从头开始创建一个小部件,但感觉应该有一个更优雅的解决方案。 Qt已经在QTextEdit和QPlainTextEdit中内置了很多文本编辑器功能。为什么重新发明轮子?

现在,虽然“明文视图”就像使用带有固定宽度字体和宽度为16个字符的QPlainTextEdit一样简单,但“十六进制视图”让我头疼。我一直在研究QTextEdit,QAbstractTextDocumentLayout等,试图想出一种方法来呈现所需的外观。对于那些从未使用过十六进制编辑器的人来说,它应该是这样的: - 使用固定宽度的字体,小部件应该是47个字符的宽度 - 小部件应该每个字节显示2个十六进制字符,字节之间有空格 - 每行16个字节

从那个想法,我一直在试图弄清楚如何子类化任何相关的类来提供所需的格式。遗憾的是,文本编辑类似乎并不像我希望的那样严格遵循模型/视图框架,因此为它创建一个新的“视图”似乎并不容易。理想情况下,小部件的功能如下:

“十六进制”和“纯文本”视图的一个文档/模型。编辑任一视图都会调整此模型并适当更新其他视图。信号/插槽处于最佳状态。 因为QTextEdit和QPlainTextEdit已经提供了所需的大部分功能(可见光标,选择,撤消/重做,原生外观等),所以重复使用它是理想的。

那么,有没有人有任何建议?我对此表示感谢。

1 个答案:

答案 0 :(得分:0)

QHexEdit2是一个非常完整的二进制数据编辑器小部件。它可以编辑非常大的文件,可用于Qt4,Qt5,PyQt4,PyQt4和python 2和3.

请参阅https://github.com/Simsys/qhexedit2