Qt - создание подклассов для предоставления альтернативного представления для текстового виджета? - PullRequest
1 голос
/ 15 июня 2011

В настоящее время я нахожусь в фазе разработки виджета Qt, как в обычном шестнадцатеричном редакторе.Сначала это казалось достаточно простым, но когда я углубляюсь в детали его реализации, у меня возникает путаница.

По сути, виджет будет состоять из 3 основных компонентов: он будет наследовать QAbstractScrollArea или QScrollArea, чтобы обеспечить прокрутку ина полях области просмотра будет отображаться смещение файла каждой строки.Тогда будет два текстовых редактора;один с шестнадцатеричным значением каждого байта файла, а другой с представлением открытого текста.

Я, конечно, сначала проверил qt-apps.org на наличие любых существующих виджетов, но в поиске «hex»возвращаются только QHexEdit и qPHexEditor, ни один из которых не является очень полным.Затем я подумал о создании виджета с нуля, как это было раньше, но мне показалось, что должно быть более элегантное решение.Qt уже имеет много функциональных возможностей текстового редактора, встроенных в QTextEdit и QPlainTextEdit;зачем изобретать велосипед?

Теперь, хотя «просмотр в виде открытого текста» будет таким же простым, как использование QPlainTextEdit с шрифтом фиксированной ширины и шириной 16 символов, «шестнадцатеричное представление» вызывает у меня головную боль,Я изучал QTextEdit, QAbstractTextDocumentLayout и т. Д., Пытаясь найти способ представить желаемый вид.Для тех, кто никогда не использовал шестнадцатеричный редактор, он должен работать следующим образом: - При использовании шрифта с фиксированной шириной виджет должен иметь ширину 47 символов - Виджет должен отображать 2 шестнадцатеричных символа на байт с пробелом между байтами -16 байт на строку

С тех пор я пытался выяснить, как создать подкласс для любых связанных классов, чтобы обеспечить желаемое форматирование.К сожалению, классы редактирования текста, кажется, не следуют структуре модели / представления так близко, как я надеялся, поэтому получение нового «представления» для него не кажется легким.В идеале виджет должен функционировать так:

Один документ / модель для представлений «в шестнадцатеричном» и «открытом тексте».Редактирование любого вида изменило бы эту модель и соответствующим образом обновило бы другое.Сигналы / Слоты в лучшем виде.Поскольку QTextEdit и QPlainTextEdit уже предоставляют большую часть необходимой функциональности (видимый курсор, выбор, отмена / повтор, внешний вид и т. Д.), Было бы идеально использовать это повторно.

Итак, кто-нибудь имееткакие-либо рекомендации?Я ценю любой вклад в это.

1 Ответ

0 голосов
/ 11 июня 2015

QHexEdit2 - довольно полный виджет редактора для двоичных данных. Он может редактировать очень большие файлы, доступен для Qt4, Qt5, PyQt4, PyQt4 с python 2 и 3.

см. https://github.com/Simsys/qhexedit2

...