QT / pyqt tag / token input - PullRequest
       16

QT / pyqt tag / token input

0 голосов
/ 27 августа 2018

Можно ли создать тег / токен для ввода в QT5 / pyqt5?

Я создаю приложение графического интерфейса, в котором пользователь может хранить изображения / фотографии и добавлять теги.Определенные теги уже находятся в базе данных, пользователь должен иметь возможность выбирать из существующих (или создавать новые при необходимости).Скажем так: Изображение 1 Теги: (Облака), (Дерево), (Гора), Дорога

Пользователь выбрал первые 2 тега из базы данных и добавил «дорогу», которой не было в базе данных.

В настоящее время я могу создавать и заполнять QComboBox данными базы данных, которые просто добавляются в QLineEdit, позже я могу обработать их обратно, отформатировав текст.Но было бы гораздо удобнее иметь что-то вроде ввода тега / токена ( точно , как на прикрепленном изображении):

  • Однострочный ввод
  • Каждый тег /У текста есть своя собственная кнопка «удалить»
  • визуально легко отличить существующие теги от только что добавленных тегов (текст против поля с кнопкой закрытия)

Есть ли в QT что-то подобное изполе, или я должен создать графический значок для каждого текста в пользовательском виджете?

enter image description here

1 Ответ

0 голосов
/ 28 января 2019

Да, это возможно.У меня наивная реализация такого виджета здесь .Это еще не закончено, но ключевой функционал реализован.

Итак, реализация основана на QTextLayout классе.Завершенные токены хранятся в классе и окрашиваются методом paintEvent.Текущий токен редактирования закрашен QTextLayout объектом.Курсор также закрашен QTextLayout объектом.Нажатия клавиш пользователя обрабатываются в keyPressEvent (набор текста, навигация).Виджет также имеет завершитель.Это основная идея, для более подробной информации, соблюдайте код.

Предстоит проделать большую работу: настраиваемый вид, использование политик токенов, удаление по клику и т. Д. Но его можно использовать в своих собственных целях.или в качестве отправной точки для вашего собственного виджета.

Реализация QLineEdit была очень полезна для меня.

...