![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
entmobile |
![]()
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 4 Регистрация: 8.12.2008 Пользователь №: 444 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Вопрос по lineEdit: как узнать когда он в фокусе а когда нет? Пытался написать свое класс на основе QLineEdit и из focusEventов емитеть сигнал, нечего не получилось!:( Может есть более корректное решение? В итоге мне надо сделать следующее: если LineEdit пуст там появляется текст, при клике(табуляции) туда текст исчезает
![]()
Сообщение отредактировал Litkevich Yuriy - 11.2.2009, 20:00
Причина редактирования: Уточнил название темы
|
|
|
ViGOur |
![]()
Сообщение
#2
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
Я думаю лучше это делать в paintEvent, примерно так:
Сообщение отредактировал ViGOur - 4.2.2009, 11:06 |
|
|
Tonal |
![]()
Сообщение
#3
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: ![]() ![]() ![]() |
focusInEvent, focusOutEvent. Оно?
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#4
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
entmobile, в обработчиках событий можно просто устанавливать/удалять текст:
|
|
|
SABROG |
![]()
Сообщение
#5
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: ![]() ![]() ![]() |
Я думаю лучше это делать в paintEvent, примерно так: Отрисовка виджета в чужом paintEvent'e ![]() Только лучше не сбрасывать текст и не перезаписывать, если он пользовательский. А то обидется юзер, когда сообщение по аське придет ![]() Сообщение отредактировал SABROG - 4.2.2009, 11:46 |
|
|
kuler |
![]()
Сообщение
#6
|
![]() Танцор диско ![]() ![]() ![]() Группа: Участник Сообщений: 441 Регистрация: 11.9.2008 Из: Москва Пользователь №: 289 Спасибо сказали: 6 раз(а) Репутация: ![]() ![]() ![]() |
hasFocus не пробовал?
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#7
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
SABROG |
![]()
Сообщение
#8
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: ![]() ![]() ![]() |
Отрисовка виджета в чужом paintEvent'e не виджета, а всего лиш текста нарисованого на виджете, ведь это подсказка типа "напишите ваше имя"Да, но тут явная передача чужого виджета в painter. По идее на такое дебаг сообщение должно выводится или не работать совсем. А если просто поверх рисовать в главном окне, то это чревато тем, что при скрытом edit'е текст нарисуется где-нибудь на другом контроле, например при переключении tab'ов. |
|
|
Litkevich Yuriy |
![]()
Сообщение
#9
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
kuler |
![]()
Сообщение
#10
|
![]() Танцор диско ![]() ![]() ![]() Группа: Участник Сообщений: 441 Регистрация: 11.9.2008 Из: Москва Пользователь №: 289 Спасибо сказали: 6 раз(а) Репутация: ![]() ![]() ![]() |
а почему focusInEvent, focusOutEvent не устроил?
|
|
|
ViGOur |
![]()
Сообщение
#11
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
entmobile |
![]()
Сообщение
#12
|
Новичок Группа: Новичок Сообщений: 4 Регистрация: 8.12.2008 Пользователь №: 444 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Чем хорошо именно рисование на виджете, так это тем, что мы не трогаем текст виджета. ![]() В этом ты прав!!! Но если переписывать paintevent у lineedit то придеться полностью его перерисовывать: текст в нем и т.д. или есть вариант что бы дорисовать то что надо а остальное оставить? пока помог вариант с выводом текста в focusEvent`ах. |
|
|
entmobile |
![]()
Сообщение
#13
|
Новичок Группа: Новичок Сообщений: 4 Регистрация: 8.12.2008 Пользователь №: 444 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Я думаю лучше это делать в paintEvent Вот немного поправил твой вариант!!! Спасибо огромное!! CODE void authEdit::paintEvent(QPaintEvent *event) { if (text().isEmpty() && !hasFocus() && !inactiveText.isEmpty()) { //можно и без hasFocus, так даже интереснее будет QLineEdit::paintEvent(event); QPainter painter(this); painter.setPen(Qt::gray); painter.setFont(QFont("Arial", 12)); painter.drawText(rect(), Qt::AlignCenter, inactiveText); } else QLineEdit::paintEvent(event); } P.S. authEdit это класс наследник от QLineEdit. |
|
|
Litkevich Yuriy |
![]()
Сообщение
#14
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Вот немного поправил твой вариант!!! Спасибо огромное!! Эдик предлагал использовать событие перерисовки родительского виджета, и это более удачный вариант чем твойС другой стороны, твой вариант хорош тем, что можно сделать наследника от QLineEdit намногие случаи жизни с таким поведением entmobile, для твоего случая можно такую модернизацию провести: дабы не было жестко зашитого в код размера шрифта
|
|
|
kuler |
![]()
Сообщение
#15
|
![]() Танцор диско ![]() ![]() ![]() Группа: Участник Сообщений: 441 Регистрация: 11.9.2008 Из: Москва Пользователь №: 289 Спасибо сказали: 6 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#16
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
kuler, он так и сделал
|
|
|
trdm |
![]()
Сообщение
#17
|
Дмитрий Трошин ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 575 Регистрация: 12.1.2008 Пользователь №: 68 Спасибо сказали: 21 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#18
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
может быть, я с рисованием еще не работал. Так на удачу воткнул
|
|
|
Константин |
![]()
Сообщение
#19
|
![]() Студент ![]() Группа: Участник Сообщений: 69 Регистрация: 9.2.2009 Пользователь №: 539 Спасибо сказали: 15 раз(а) Репутация: ![]() ![]() ![]() |
всё это уже есть в SearchLineEdit - в доп.компонентах на prog.org.ru
скоро будет свежая версия... |
|
|
z0D5e8n7x |
![]()
Сообщение
#20
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 23.3.2010 Пользователь №: 1554 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
всё это уже есть в SearchLineEdit - в доп.компонентах на prog.org.ru скоро будет свежая версия... я тут сделал свой вариант попроще, мож кому сгодится Раскрывающийся текст
|
|
|
z0D5e8n7x |
![]()
Сообщение
#21
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 23.3.2010 Пользователь №: 1554 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
а блин, куча косяков
Раскрывающийся текст
|
|
|
novichkov |
![]()
Сообщение
#22
|
Студент ![]() Группа: Участник Сообщений: 64 Регистрация: 20.3.2008 Из: Северодвинск Пользователь №: 128 Спасибо сказали: 6 раз(а) Репутация: ![]() ![]() ![]() |
А можно просто подождать Qt 4.7
![]() |
|
|
Sokoloff |
![]()
Сообщение
#23
|
Участник ![]() ![]() Группа: Участник Сообщений: 237 Регистрация: 1.4.2009 Из: Москва Пользователь №: 654 Спасибо сказали: 50 раз(а) Репутация: ![]() ![]() ![]() |
Вот немного поправил твой вариант!!! Спасибо огромное!! Эдик предлагал использовать событие перерисовки родительского виджета, и это более удачный вариант чем твой |
|
|
Litkevich Yuriy |
![]()
Сообщение
#24
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
KuZ |
![]()
Сообщение
#25
|
Студент ![]() Группа: Новичок Сообщений: 12 Регистрация: 13.12.2009 Пользователь №: 1303 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Вот возможно так:
CODE class LE : public QLineEdit { public: LE(QWidget *wgt = 0); protected: virtual void focusInEvent(QFocusEvent *); virtual void focusOutEvent(QFocusEvent *); }; CODE LE::LE(QWidget *wgt) : QLineEdit(wgt){} void LE::focusInEvent(QFocusEvent *e) { QLineEdit::focusInEvent(e); QPalette p = palette(); p.setColor(QPalette::Text,Qt::black); setPalette(p); setText(text() == "Enter Text" ? "" : text()); } void LE::focusOutEvent(QFocusEvent *e) { QLineEdit::focusOutEvent(e); QPalette p = palette(); p.setColor(QPalette::Text,Qt::gray); setPalette(p); setText(text().isEmpty() ? "Enter Text" : text()); } только если набраный текст Enter Text, то "ошибка" чето придумать можно чтоб подобный вариант работал. |
|
|
SABROG |
![]()
Сообщение
#26
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: ![]() ![]() ![]() |
В Qt 4.7 должен появится метод setPlaceholderText. В Qt 4.6 он уже реализован, но не доступен. Видимо тролли нас хотят удивить, ну или еще не все отладили. Метод работает, но достучаться можно только через хак:
|
|
|
z0D5e8n7x |
![]()
Сообщение
#27
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 23.3.2010 Пользователь №: 1554 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
чет у меня все криво и косо ((
опять поправил - http://z0d5e8n7x.ru/blog/2010/03/24/qlineedit-v-stile-web/ |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 15.7.2025, 23:07 |