В настоящее время я нахожусь в фазе разработки виджета Qt, как в обычном шестнадцатеричном редакторе.Сначала это казалось достаточно простым, но когда я углубляюсь в детали его реализации, у меня возникает путаница.
По сути, виджет будет состоять из 3 основных компонентов: он будет наследовать QAbstractScrollArea или QScrollArea, чтобы обеспечить прокрутку ина полях области просмотра будет отображаться смещение файла каждой строки.Тогда будет два текстовых редактора;один с шестнадцатеричным значением каждого байта файла, а другой с представлением открытого текста.
Я, конечно, сначала проверил qt-apps.org на наличие любых существующих виджетов, но в поиске «hex»возвращаются только QHexEdit и qPHexEditor, ни один из которых не является очень полным.Затем я подумал о создании виджета с нуля, как это было раньше, но мне показалось, что должно быть более элегантное решение.Qt уже имеет много функциональных возможностей текстового редактора, встроенных в QTextEdit и QPlainTextEdit;зачем изобретать велосипед?
Теперь, хотя «просмотр в виде открытого текста» будет таким же простым, как использование QPlainTextEdit с шрифтом фиксированной ширины и шириной 16 символов, «шестнадцатеричное представление» вызывает у меня головную боль,Я изучал QTextEdit, QAbstractTextDocumentLayout и т. Д., Пытаясь найти способ представить желаемый вид.Для тех, кто никогда не использовал шестнадцатеричный редактор, он должен работать следующим образом: - При использовании шрифта с фиксированной шириной виджет должен иметь ширину 47 символов - Виджет должен отображать 2 шестнадцатеричных символа на байт с пробелом между байтами -16 байт на строку
С тех пор я пытался выяснить, как создать подкласс для любых связанных классов, чтобы обеспечить желаемое форматирование.К сожалению, классы редактирования текста, кажется, не следуют структуре модели / представления так близко, как я надеялся, поэтому получение нового «представления» для него не кажется легким.В идеале виджет должен функционировать так:
Один документ / модель для представлений «в шестнадцатеричном» и «открытом тексте».Редактирование любого вида изменило бы эту модель и соответствующим образом обновило бы другое.Сигналы / Слоты в лучшем виде.Поскольку QTextEdit и QPlainTextEdit уже предоставляют большую часть необходимой функциональности (видимый курсор, выбор, отмена / повтор, внешний вид и т. Д.), Было бы идеально использовать это повторно.
Итак, кто-нибудь имееткакие-либо рекомендации?Я ценю любой вклад в это.