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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Editable label  (Прочитано 6203 раз)
Alp
Гость
« : Сентябрь 14, 2010, 16:30 »

Надо сделать такую штуку - лейбл, при двойном клике появляется QLineEdit в котором происходит редактирование текста с лейбла. По определенным событиям редактор пропадает, текст в лейбле обновляется.
События, по которым закрывается редактор:
- клик мышью вне области редактора (текст в лейбле обновляется)
- Key_Return (текст в лейбле обновляется)
- Key_Escape (в этом случае текст в лейбле остается старый).

Столкнулся при реализации этой простой задачи с рядом проблем:
1. Для отслеживания клика мышью вызываю у редактора grabMouse, в котором проверяю принадлежность координаты прямоугольнику редактора и делаю вывод о том где кликнул пользователь. Проблема в том, что после вызова grabMouse я ни разу не попадаю в mousePressEvent, более того, подвисает приложение и система до нажатия виндовых шоткатов (типа Ctrl-Escape или Win), т.е. до принудительного отбирания фокуса у приложения. По результатам в консоли отладки видно, что все клики происходившие за время "повисания" отображены, хотя и неизвестно когда обработаны.

2. У QLineEdit есть поганая привычка - добавлять марджины. Если присмотреться к редактору, то видно, что текст не прилипает к рамке, а отсутпает от нее по всем границам. Мне же хочется этим управлять (иначе получается, что при вызове редактора текст "съезжает" вниз-вправо, относительно лейбла). Можо ли это сделать малой кровью?

3. Можно ли вообще отказаться от идеи QLineEdit и обновлять влаги взаимодействия с текстом (даэе как-то это получилось сделать), при этом получая "редактируемый" текст в лейбле? Т.е. лейб в режимередактирования все-равно возвращает свой изначальный текст при вызове text(). Мне же надо получить обновленный.
Записан
Alp
Гость
« Ответ #1 : Сентябрь 14, 2010, 16:57 »

тестовый проект
Записан
merke
Гость
« Ответ #2 : Сентябрь 14, 2010, 17:47 »

Вместо лэйбла используй QLineEdit, задай ему соответствующий стайлшит и получится лэбл. Такая тема уже обсуждалась на форуме, поищи.
Записан
merke
Гость
« Ответ #3 : Сентябрь 14, 2010, 17:49 »

Вот здесь большой пример использования QEvent - http://qt.ucoz.net/publ/primery_ispolzovanija_klassa_qevent/1-1-0-17 Почитай, я уверен, ты там черпнешь много полезного для решения твоей задачи.
Записан
Alp
Гость
« Ответ #4 : Сентябрь 14, 2010, 18:39 »

Вместо лэйбла используй QLineEdit, задай ему соответствующий стайлшит и получится лэбл. Такая тема уже обсуждалась на форуме, поищи.
Это плохой, негодный вариант. У QLineEdit нельзя запретить выделение и его нельзя сделать "прозрачным". Т.е. когда лежит QLabel на виджете нет нужды думать о том, какой у него цвет. Здесь же надо постоянно обновлять стайлшит если родительский виджет изменил свой цвет.

Насчет QEvent, если честно, не понял с какого боку он может помочь в решении  моей задачи? Как обрабатываются эвенты я и так знаю, вопрос в том почему при grabMouse происходят странности.
Записан
Drafter
Гость
« Ответ #5 : Сентябрь 14, 2010, 23:02 »

Цитировать
У QLineEdit нельзя запретить выделение и его нельзя сделать "прозрачным".

Попробуйте проявлять больше настойчивости (усидчивости), прежде чем утверждать, что де сделать ничего нельзя. Прозрачность, например, установить очень просто (включите в стиль виджета - "background-color: rgba(0, 0, 0, 0);"). Так же наверняка есть возможность запретить выделение. Просто вы не пытались найти решение Улыбающийся.
Записан
Alp
Гость
« Ответ #6 : Сентябрь 15, 2010, 13:12 »

Да, чего-то я поторопился, спасибо за идею.
Записан
SASA
Гость
« Ответ #7 : Сентябрь 15, 2010, 17:10 »

Можно посмотреть реализацию в Ку Те Дизайнере. Там, прям на форме можно редактировать надписи на кнопках, лейблах.
Записан
Marat(Qt)
Гость
« Ответ #8 : Сентябрь 22, 2010, 17:36 »

margin'ы тоже в stylesheet можно указать
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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