Russian Qt Forum
Март 28, 2024, 18:50 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Метка с возможностью редактирования как QLineEdit  (Прочитано 9707 раз)
kdm
Гость
« : Июль 10, 2010, 15:26 »

Дело в том, что надо было реализовать такой виджет, который отображал метку, как QLabel и мог бы быть редактируемым по double click'у, как QLineEdit, и вновь отображаться, как метка QLabel при потере фокуса и нажатию enter.
Я зделал, так, взял на одном виджете и QLabel и QLineEdit и отображаю их по очереди при соотв. событиях.
Это оптимально или можно было сделать более виртуозно?Улыбающийся

И если кто знает, как сделать, чтобы если строка не входит из-за ограничения длины виджета, отображалось бы три точки в конце строки?
Записан
MoPDoBoPoT
Гость
« Ответ #1 : Июль 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 )
Записан
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #2 : Июль 10, 2010, 19:44 »

С помощью qss сделать стиль для QLineEdit , который прячет рамку и т.п. ("превращает QLineEdit в QLabel) и применять его для случаев, когда focused=false.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #3 : Июль 10, 2010, 19:47 »

а я бы по аналогии с делегатами в представлениях сделал. Т.е. в нужный момент создавал виджет-редактор помещённый по тем же координатам и с теми же размерами, что и метка. При получении сигнала от виджета-редактора о завершении редактирования, копировал бы данные в метку, а виджет-редактор планировал бы для удаления.
Записан

Юра.
kdm
Гость
« Ответ #4 : Июль 10, 2010, 20:58 »

Спасибо вам
Записан
vinnitu
Гость
« Ответ #5 : Август 06, 2010, 16:07 »

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

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

Сообщений: 189


Просмотр профиля
« Ответ #6 : Октябрь 23, 2016, 09:25 »

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

Мои проекты на Qt: DoubleContact, LInvert
Day
Частый гость
***
Offline Offline

Сообщений: 290


Просмотр профиля
« Ответ #7 : Октябрь 24, 2016, 19:02 »

но потом после редактирования вызываю QLabel::text(), он возвращает старое значение
Очень интересно! А вы не пробовали свернуть - развернуть окно? Не появится ли старое значение?
Записан
DarkHobbit
Самовар
**
Offline Offline

Сообщений: 189


Просмотр профиля
« Ответ #8 : Октябрь 26, 2016, 22:40 »

А вы не пробовали свернуть - развернуть окно? Не появится ли старое значение?
Свернуть-развернуть не пробовал, это наследник от QDialog, у него сворачивание-разворачивание по умолчанию отключено. А вот ресайз делал. Нет, не появляется.
А на что этот вопрос наводит? Вы хотите сказать, что чтобы новое значение сохранилось, пользователь должен ещё что-то нажать? И если да, то что?
Записан

Мои проекты на Qt: DoubleContact, LInvert
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #9 : Октябрь 26, 2016, 22:50 »

Может, проще использовать QLineEdit/QTextEdit без рамки?
Записан

DarkHobbit
Самовар
**
Offline Offline

Сообщений: 189


Просмотр профиля
« Ответ #10 : Октябрь 26, 2016, 23:03 »

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

Так что актуальность реализации именно через QLabel лично для меня уже не такая высокая. Но для порядку разобраться в проблеме хотелось бы - вдруг ещё где пригодится...
« Последнее редактирование: Октябрь 26, 2016, 23:05 от DarkHobbit » Записан

Мои проекты на Qt: DoubleContact, LInvert
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.052 секунд. Запросов: 23.