crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> QTextEdit, Как отловить опытку изменения содержимого?
flankerr
  опции профиля:
сообщение 4.3.2010, 15:47
Сообщение #1


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 9.1.2008
Пользователь №: 65

Спасибо сказали: 2 раз(а)




Репутация:   0  


Есть диалог, на нём есть QTextEdit
Содержимое QTextEdit иниализированнол неким текстом ну к примеру "введите текст"
Нужно что при попытке ввода текста умолчательное значение сразу стиралось.

Частично сделать это получилось.
Ловим событие OnSelectChanged() и елси оно сработал впервые то затираем текст setText("");

Но вот если перейти в QTextEdit через табуляцию (без мышки) получается кукишь.


Вопрос как бы реализовать эту фишку?

У мяен диалог сделан через дизайнер поэтому просьба предлогать варианты без созадние собственного класса наследника от QTextEdit.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 4.3.2010, 16:01
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(flankerr @ 4.3.2010, 18:47) *
Ловим событие OnSelectChanged()
незнаю что за событие такое.
Вариантов два
1) нарисовать на QTextEdit нужный текст (смотри про QLineEdit подобную тему)
2) Отслеживать сигнал textChanged
3) Отслеживать событие focusInEvent
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
flankerr
  опции профиля:
сообщение 4.3.2010, 16:43
Сообщение #3


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 9.1.2008
Пользователь №: 65

Спасибо сказали: 2 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 4.3.2010, 16:01) *
Цитата(flankerr @ 4.3.2010, 18:47) *
Ловим событие OnSelectChanged()
незнаю что за событие такое.

по спешке вместо сигнала void selectionChanged () написал название своего обработчика этого сигнала.
Цитата
2) Отслеживать сигнал textChanged

Беда в том что сигнал приходит ПОСЛЕ того как изменился текст
Цитата
3) Отслеживать событие focusInEvent

Для этого надо делать своего наследника от QTextEdit что в моём случае не возможно. (диалог создан в редакторе и переделовать его руками нет не времени ни желания)
Однако елсиьбы была возможность отлсеживание смены фокуса дочерних элементов диалога то это всё бы решило. Но как отловить смену фокуса у дочерних эелементов диалога ???

Сообщение отредактировал flankerr - 4.3.2010, 16:43
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
MoPDoBoPoT
  опции профиля:
сообщение 4.3.2010, 16:58
Сообщение #4


Участник
**

Группа: Участник
Сообщений: 172
Регистрация: 7.5.2009
Из: Москва
Пользователь №: 738

Спасибо сказали: 44 раз(а)




Репутация:   9  


Цитата(flankerr @ 4.3.2010, 16:43) *
Для этого надо делать своего наследника от QTextEdit что в моём случае не возможно.

Для этого есть фильтр событий: QObject::eventFilter()+QObject::installEventFilter(). Надо будет обрабатывать QEvent::FocusIn и QEvent::FocusOut (и сделать небольшую проверку, чтобы не затирать пользовательский текст).
Кстати, в дизайнере для наследования есть "продвижение своего виджета" (Promote to...)

А вообще, 1-ый вариант, предложенный Litkevich Yuriy, самый красивый.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
flankerr
  опции профиля:
сообщение 4.3.2010, 17:21
Сообщение #5


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 9.1.2008
Пользователь №: 65

Спасибо сказали: 2 раз(а)




Репутация:   0  


MoPDoBoPoT, Говрю же НЕ хочу делать наследника! Точнее нет такой возможности. Или предлогается фильровать события самого диалога? тогда как? можно подробнее?

Встраивать свой виджет на постоянной основе в список доступных виджетов у меня желания нет. У встроенного в Студию редактора найти "Promote to" не удалось.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 4.3.2010, 17:24
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(flankerr @ 4.3.2010, 20:21) *
Говрю же НЕ хочу делать наследника!
а зачем тебе наследник? Ты по ссылке сходил? Всю тему прочитал?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
flankerr
  опции профиля:
сообщение 4.3.2010, 17:31
Сообщение #7


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 9.1.2008
Пользователь №: 65

Спасибо сказали: 2 раз(а)




Репутация:   0  


Сходил, почитал... но слона не вижу...
Там везде речь про класс наследник class authEdit : public QLineEdit
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
MoPDoBoPoT
  опции профиля:
сообщение 4.3.2010, 17:51
Сообщение #8


Участник
**

Группа: Участник
Сообщений: 172
Регистрация: 7.5.2009
Из: Москва
Пользователь №: 738

Спасибо сказали: 44 раз(а)




Репутация:   9  


Цитата(flankerr @ 4.3.2010, 17:31) *
Сходил, почитал... но слона не вижу...

Первый же ответ на вопрос (пост ViGOur'а).

Цитата(flankerr @ 4.3.2010, 17:31) *
MoPDoBoPoT, Говрю же НЕ хочу делать наследника!

Ну так связка QObject::eventFilter()+QObject::installEventFilter() не требует наследника (почитай ассистента, да и на форумах много про это писалось)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
flankerr
  опции профиля:
сообщение 4.3.2010, 18:04
Сообщение #9


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 9.1.2008
Пользователь №: 65

Спасибо сказали: 2 раз(а)




Репутация:   0  


MoPDoBoPoT, слона точно не увидел... но дёргать у диалога paintEvent(QPaintEvent *) это очень не краисвый вариант для этой цели. Не. Не покатит.

На счёт фильтров на солкьо я понял надо у диалога переопределить eventFilter(QObject *obj, QEvent *event) так чтоли ?
И дёргать на каждый чих.. эээ... Хрен редьки не слаще. Но похоже другого варианта нет. Попробую через это.

Плин ну чего проще просто узнать что изменился фокус ввода - а не могу найти такогог сообшения...

Сообщение отредактировал flankerr - 4.3.2010, 18:10
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 4.3.2010, 18:16
Сообщение #10


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


flankerr,
ну не хочешь красиво напиши костыль.

Цитата
void QTextEdit::textChanged () [signal]
This signal is emitted whenever the document's content changes; for example, when text is inserted or deleted, or when formatting is applied.


slTextChanged() {
    if(textEdit.text().isEmpty()) {
        textEdit.setText("Введите текст!");
                textEdit.selectAll();
    }
}


Сообщение отредактировал kwisp - 4.3.2010, 18:18
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 17.4.2024, 1:27