Название: Editable label Отправлено: Alp от Сентябрь 14, 2010, 16:30 Надо сделать такую штуку - лейбл, при двойном клике появляется QLineEdit в котором происходит редактирование текста с лейбла. По определенным событиям редактор пропадает, текст в лейбле обновляется.
События, по которым закрывается редактор: - клик мышью вне области редактора (текст в лейбле обновляется) - Key_Return (текст в лейбле обновляется) - Key_Escape (в этом случае текст в лейбле остается старый). Столкнулся при реализации этой простой задачи с рядом проблем: 1. Для отслеживания клика мышью вызываю у редактора grabMouse, в котором проверяю принадлежность координаты прямоугольнику редактора и делаю вывод о том где кликнул пользователь. Проблема в том, что после вызова grabMouse я ни разу не попадаю в mousePressEvent, более того, подвисает приложение и система до нажатия виндовых шоткатов (типа Ctrl-Escape или Win), т.е. до принудительного отбирания фокуса у приложения. По результатам в консоли отладки видно, что все клики происходившие за время "повисания" отображены, хотя и неизвестно когда обработаны. 2. У QLineEdit есть поганая привычка - добавлять марджины. Если присмотреться к редактору, то видно, что текст не прилипает к рамке, а отсутпает от нее по всем границам. Мне же хочется этим управлять (иначе получается, что при вызове редактора текст "съезжает" вниз-вправо, относительно лейбла). Можо ли это сделать малой кровью? 3. Можно ли вообще отказаться от идеи QLineEdit и обновлять влаги взаимодействия с текстом (даэе как-то это получилось сделать), при этом получая "редактируемый" текст в лейбле? Т.е. лейб в режимередактирования все-равно возвращает свой изначальный текст при вызове text(). Мне же надо получить обновленный. Название: Re: Editable label Отправлено: Alp от Сентябрь 14, 2010, 16:57 тестовый проект
Название: Re: Editable label Отправлено: merke от Сентябрь 14, 2010, 17:47 Вместо лэйбла используй QLineEdit, задай ему соответствующий стайлшит и получится лэбл. Такая тема уже обсуждалась на форуме, поищи.
Название: Re: Editable label Отправлено: merke от Сентябрь 14, 2010, 17:49 Вот здесь большой пример использования QEvent - http://qt.ucoz.net/publ/primery_ispolzovanija_klassa_qevent/1-1-0-17 Почитай, я уверен, ты там черпнешь много полезного для решения твоей задачи.
Название: Re: Editable label Отправлено: Alp от Сентябрь 14, 2010, 18:39 Вместо лэйбла используй QLineEdit, задай ему соответствующий стайлшит и получится лэбл. Такая тема уже обсуждалась на форуме, поищи. Это плохой, негодный вариант. У QLineEdit нельзя запретить выделение и его нельзя сделать "прозрачным". Т.е. когда лежит QLabel на виджете нет нужды думать о том, какой у него цвет. Здесь же надо постоянно обновлять стайлшит если родительский виджет изменил свой цвет.Насчет QEvent, если честно, не понял с какого боку он может помочь в решении моей задачи? Как обрабатываются эвенты я и так знаю, вопрос в том почему при grabMouse происходят странности. Название: Re: Editable label Отправлено: Drafter от Сентябрь 14, 2010, 23:02 Цитировать У QLineEdit нельзя запретить выделение и его нельзя сделать "прозрачным". Попробуйте проявлять больше настойчивости (усидчивости), прежде чем утверждать, что де сделать ничего нельзя. Прозрачность, например, установить очень просто (включите в стиль виджета - "background-color: rgba(0, 0, 0, 0);"). Так же наверняка есть возможность запретить выделение. Просто вы не пытались найти решение :). Название: Re: Editable label Отправлено: Alp от Сентябрь 15, 2010, 13:12 Да, чего-то я поторопился, спасибо за идею.
Название: Re: Editable label Отправлено: SASA от Сентябрь 15, 2010, 17:10 Можно посмотреть реализацию в Ку Те Дизайнере. Там, прям на форме можно редактировать надписи на кнопках, лейблах.
Название: Re: Editable label Отправлено: Marat(Qt) от Сентябрь 22, 2010, 17:36 margin'ы тоже в stylesheet можно указать
|