目前,我正處於Qt小部件的設計階段,就像在典型的十六進制編輯器中看到的那樣。看起來很簡單,但是隨着我深入實施細節,我有些困惑。Qt - 爲文本小部件提供替代視圖的子類化?
基本上,小部件將包含3個核心組件:它將繼承QAbstractScrollArea或QScrollArea以提供滾動,並且在視口邊距中,它將顯示每行的文件偏移量。然後會有兩個文本編輯器;一個帶有文件每個字節的十六進制值,另一個帶有明文字符表示。
當然,我首先檢查qt-apps.org是否存在任何現有的小部件,但搜索「hex」只返回QHexEdit和qPHexEditor,它們都不是很完整。然後,我考慮從頭開始創建一個小部件,但覺得應該有一個更優雅的解決方案。 Qt已經在QTextEdit和QPlainTextEdit中內置了很多文本編輯器功能;爲什麼重新發明輪子?
現在,「純文本視圖」就像使用QPlainTextEdit和固定寬度的字體和16個字符的寬度一樣簡單,但「十六進制視圖」讓我很頭疼。我一直在研究QTextEdit,QAbstractTextDocumentLayout等,試圖找出一種方式來呈現所需的外觀。對於那些從未使用過十六進制編輯器的用戶,它的功能應該如下: - 使用固定寬度的字體,窗口小部件應該是47個字符的寬度 - 窗口小部件應該顯示每個字節2個十六進制字符,字節之間留有空格 - 每行16字節
因爲這個想法,我一直在試圖弄清楚如何爲任何相關的類子類提供所需的格式。不幸的是,文本編輯類似乎並沒有像我期望的那樣嚴格遵循模型/視圖框架,所以爲它創建一個新的「視圖」似乎並不容易。理想情況下,小部件的功能如下:
「hex」和「plaintext」視圖的文檔/模型。編輯任一視圖都會調整此模型並適當地更新其他視圖。最好的信號/插槽。 因爲QTextEdit和QPlainTextEdit已經提供了很多所需的功能(可見光標,選擇,撤消/重做,本地外觀等),所以重用它是理想的。
那麼,有沒有人有任何建議?我很欣賞對此的任何意見。
搜索Okteta(一個KDE包) - 包裝與功能,複雜的GUI。 (順便說一下,編輯器很難編碼,十六進制或不是。這是一項艱鉅的任務。) – Mat 2011-06-15 18:59:40
你可以看看[KHexEdit](http://sourceforge.net/projects/hexedit/),它是KDE的一個hexeditor 。他們本應該解決類似的問題。 – 2011-06-15 19:59:42
KHexEdit似乎沒有用Qt開發。我會檢查Okteta;他們的小部件可能是可用的。我希望源代碼是GPLv3,不過:/ – Zac 2011-06-16 01:21:22