Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: kdm от Июль 10, 2010, 15:26



Название: Метка с возможностью редактирования как QLineEdit
Отправлено: kdm от Июль 10, 2010, 15:26
Дело в том, что надо было реализовать такой виджет, который отображал метку, как QLabel и мог бы быть редактируемым по double click'у, как QLineEdit, и вновь отображаться, как метка QLabel при потере фокуса и нажатию enter.
Я зделал, так, взял на одном виджете и QLabel и QLineEdit и отображаю их по очереди при соотв. событиях.
Это оптимально или можно было сделать более виртуозно?:)

И если кто знает, как сделать, чтобы если строка не входит из-за ограничения длины виджета, отображалось бы три точки в конце строки?


Название: Re: Метка с возможностью редактирования как QLineEdit
Отправлено: MoPDoBoPoT от Июль 10, 2010, 17:01
1. Вообще, есть void QLabel::setTextInteractionFlags( Qt::TextInteractionFlags flags ), но при QLabel + QLineEdit нагляднее редактирование, хотя это уже дело вкуса.
2. В помощь QString QFontMetrics::elidedText( const QString & text, Qt::TextElideMode mode, int width, int flags = 0 )


Название: Re: Метка с возможностью редактирования как QLineEdit
Отправлено: xokc от Июль 10, 2010, 19:44
С помощью qss сделать стиль для QLineEdit , который прячет рамку и т.п. ("превращает QLineEdit в QLabel) и применять его для случаев, когда focused=false.


Название: Re: Метка с возможностью редактирования как QLineEdit
Отправлено: lit-uriy от Июль 10, 2010, 19:47
а я бы по аналогии с делегатами в представлениях сделал. Т.е. в нужный момент создавал виджет-редактор помещённый по тем же координатам и с теми же размерами, что и метка. При получении сигнала от виджета-редактора о завершении редактирования, копировал бы данные в метку, а виджет-редактор планировал бы для удаления.


Название: Re: Метка с возможностью редактирования как QLineEdit
Отправлено: kdm от Июль 10, 2010, 20:58
Спасибо вам


Название: Re: Метка с возможностью редактирования как QLineEdit
Отправлено: vinnitu от Август 06, 2010, 16:07
И если кто знает, как сделать, чтобы если строка не входит из-за ограничения длины виджета, отображалось бы три точки в конце строки?

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


Название: Re: Метка с возможностью редактирования как QLineEdit
Отправлено: DarkHobbit от Октябрь 23, 2016, 09:25
1. Вообще, есть void QLabel::setTextInteractionFlags( Qt::TextInteractionFlags flags )
А кто-нибудь знает, как воспользоваться результатами такого редактирования?
Я вот тоже выставил этот флаг (простота редактирования "по месту" подкупила), да, текст редактируется, но потом после редактирования вызываю QLabel::text(), он возвращает старое значение.
Проверено на версиях Qt от 4.6 до 5.6.


Название: Re: Метка с возможностью редактирования как QLineEdit
Отправлено: Day от Октябрь 24, 2016, 19:02
но потом после редактирования вызываю QLabel::text(), он возвращает старое значение
Очень интересно! А вы не пробовали свернуть - развернуть окно? Не появится ли старое значение?


Название: Re: Метка с возможностью редактирования как QLineEdit
Отправлено: DarkHobbit от Октябрь 26, 2016, 22:40
А вы не пробовали свернуть - развернуть окно? Не появится ли старое значение?
Свернуть-развернуть не пробовал, это наследник от QDialog, у него сворачивание-разворачивание по умолчанию отключено. А вот ресайз делал. Нет, не появляется.
А на что этот вопрос наводит? Вы хотите сказать, что чтобы новое значение сохранилось, пользователь должен ещё что-то нажать? И если да, то что?


Название: Re: Метка с возможностью редактирования как QLineEdit
Отправлено: gil9red от Октябрь 26, 2016, 22:50
Может, проще использовать QLineEdit/QTextEdit без рамки?


Название: Re: Метка с возможностью редактирования как QLineEdit
Отправлено: DarkHobbit от Октябрь 26, 2016, 23:03
Может, проще использовать QLineEdit/QTextEdit без рамки?
Я уже пришёл к мысли, что для пользователя даже лучше, если он будет с рамкой. Собственно, в моём случае задача была такая, что отображается либо текстовый URL, либо изображение (vCard-тег PHOTO из RFC 2426, если интересно). Вот и хотелось их отображать поочерёдно на одном компоненте. Но сейчас поигрался с прототипом и думаю, что отображать-то их можно, а вот редактировать текст всё равно лучше отдельным виджетом, поскольку 70-90% пользователей всё равно не догадаются без подсказки, что эту метку ещё и редактировать можно.

Так что актуальность реализации именно через QLabel лично для меня уже не такая высокая. Но для порядку разобраться в проблеме хотелось бы - вдруг ещё где пригодится...