LINUX.ORG.RU

GUI: сложный виджет

 ,


0

2

http://global.libreoffice.org/assets/Uploads/EN-Project_images/4.0NewFeatures...

Планирую написать софтину, нужны будут вот такие вот inline comments. На Qt такое проще всего реализовать или есть варианты? Хз с какой стороны подступиться. Рисовать поверх QTextEdit, делать свой виджет? Qt еще не шупал, пока что игрался только с GTK и tkinter.


Выдрать из офиса не вариант, там у них свой какой-то фреймворк. Выглядит сложно.

Gregon
() автор топика

Можно сделать свой текстовый виджет используя QTextDocument, QTextFragment, QTextBlock и т.п. для отображения rich text, правда конечно писать там не мало. Ну а нужные дополнительные функции там уже поймешь как добавить. А вот как дополнять существующий QTextEdit, я даже не знаю. Предчувствую, что придется извращаться, если пойдешь по этому пути.

m0rph ★★★★★
()
Ответ на: комментарий от anonymous

Ну и при желании ее ес-но можно кромсать под себя лично.

anonymous
()
Ответ на: комментарий от Gregon

Рисовать поверх QTextEdit, делать свой виджет?

"И того и другого, и можно без хлеба!" © 

Я как-то раз решал подобную задачу, только там были не комментарии а «переменные» в тексте, выносных линий не требовалось (их думаю придется рисовать поверх). Так вот, я перекрывал обработчик нажатий в QTextEdit и отслеживал позиции этих самых переменных, выделенных в тексте. Получилось довольно костыльно, залочен копипаст (точнее залочен после добавления первой переменной в текст).

CrossFire ★★★★★
()
Ответ на: комментарий от m0rph

Можно посмотреть, как оно сделано в Qt Crearor: http://wstaw.org/m/2014/09/29/plasma-desktopEs1772.png

Там на определённых ключевых словах есть всплывающая подсказка, по сути аннотация. Переместить её в окно справа как на скрине ТС, не составит проблем. Написать редактор подобных аннотаций — тоже. А вот как линию начертить без костылей, я не знаю.

EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 2)

Для начала попробовать отнаследоваться от QTextEdit, переопределив paintEvent. Через QAbstractTextDocumentLayout::blockBoundingRect можно вытаскивать координаты текстовых блоков и на основе этой информации рисовать выделение и сноски-линии (предварительно вызвав родительский paintEvent). С другой стороны метод QTextEdit::paintEvent небольшой и не шибко сложный, поэтому возможно будет удобнее целиком скопировать его и заточить под собственные нужды. Еще надо что-то делать с размером документа, чтобы зарезервировать место сбоку под сами аннотации. Ну а отрисовка самих аннотаций (если не нужно inplace-редактирование) вообще ерунда. Короче, исходники самого QTextEdit-виджета тебе в зубы.

Если не хочется шаманить, то тогда следует упрощать интерфейс, реализуя сноски, например, через тултипы.

Amp ★★★
()

Точно не знаю, но может попробовать QGraphicsScene, туда закинуть RichEdit виджет, а поверх всего этого нарисовать блоки аннотаций и разные цветные линии.

pathfinder ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.