crossplatform.ru

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

2 страниц V  < 1 2  
Ответить в данную темуНачать новую тему
flankerr
  опции профиля:
сообщение 4.3.2010, 18:27
Сообщение #11


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

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

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




Репутация:   0  


MoPDoBoPoT У диалога eventFilter(QObject *obj, QEvent *event) почемуто вообще ни когда не вызывается.


kwisp, Красиво??? Простите а что из выше описанного красиво???
Ну уже же написал чуть выше сигнал textChanged () приходит ПОСЛЕ того как изменился текст. Это во первых. А во вторых не понял когда предполгаеся вызывать приведённую в качестве примера функцию и какому классу она должна принадлежать.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 4.3.2010, 18:35
Сообщение #12


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

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

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




Репутация:   23  


flankerr,
не функция а слот. присоедини к сигналу изменения текста в QTextEdit.
пусть принадлежит классу, какому тебе заблагорассудится, где ты собрался обрабатывать события изменения фокуса? там и слот создай.
вызывай этот слот при создании диалога 1 раз дале он будет вызываться всякий раз как ты изменишь текст и в случае пустого текста в редактореТекста появится Введите текст! + будет выделенным.
это предложенный мной вариант как альтернативный предложенным ранее. если тебе лень или нет времени изучить что такое фильтр событий eventFilter() можешь воспользоваться этим методом по моему с твоей задачей он справляется.

П.С.
если ты не понял -- фильтр событий не тронет твой диалог, тебе не надо будет наследоваться и переписывать методы диалога.

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


Участник
**

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

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




Репутация:   9  


А ты установил фильтр на текстедит? Пример:
Dialog::Dialog(QWidget *parent/* = 0*/)
        : QDialog(parent)
{
    ...
    txtEdit = new QTextEdit("Введите текст!", this);
    txtEdit->installEventFilter(this);
    ...
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
flankerr
  опции профиля:
сообщение 4.3.2010, 18:51
Сообщение #14


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

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

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




Репутация:   0  


kwisp, ну если я правильно понял то фишка в textEdit.selectAll(). При попытки изменения, изменение встанет на место выделения, а т.к. выделено всё то оно соответсвенно будет удалено и замениться на только что введённое. Если я правильно понял тогда нет смысла в этом слоте и привязки к изменению текста. Можно просто в момент иницализации диалога инициализировать и текст и выделить его - так оно логичнее будет.
Но выделять текст не хотелось бы.


MoPDoBoPoT, О! видимо это я не учёл. Спасибо. Заработало.


И так благодаря вашим советам найдено два спосба решения поставленой задачи:
1.
inline bool CMyDlg::eventFilter(QObject *obj, QEvent *event)
 {
     if(m_bIsNeedClearTextEdit && (obj == m_ui.m_pTextEdit))
     {
         if(event->type() == QEvent::FocusIn)
         {
             m_bIsNeedClearTextEdit = false;
             m_ui.m_pFragInfoLabel->setText("");
         };
     };
     return QDialog::eventFilter(obj, event);
 }

2.
void CMyDlg::CMyDlg()
{
   ....
   connect(qApp,SIGNAL(focusChanged(QWidget*,QWidget*)),this,SLOT(OnFocusChanged( QWidget*, QWidget*)));
   ....
}

void CMyDlg::OnFocusChanged( QWidget * old, QWidget * now )
{
   if(m_bIsNeedClearTextEdit && (now == m_ui.m_pTextEdit))
   {
       m_bIsInitFragInfoLabel = flase;
       m_ui.m_pFragInfoLabel->setText("");
   }
}


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


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

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

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




Репутация:   94  


kwisp, логика твоего примера имеет ошибку, т.к. когда пользователь начнёт писать, то оно не пусто, а надобы убрать "Введите Текст".

Нет, всё таки первый вариант был самый простой, с рисованием поверх.

Цитата(flankerr @ 4.3.2010, 21:51) *
О! видимо это я не учёл
как так не учёл, вот ведь пример в описании функции изучи его внимательно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 4.3.2010, 18:59
Сообщение #16


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

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

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




Репутация:   23  


flankerr,
правильно понял.
Цитата(flankerr @ 4.3.2010, 18:51) *
тогда нет смысла в этом слоте и привязки к изменению текста. Можно просто в момент иницализации диалога инициализировать и текст и выделить его - так оно логичнее будет.

а пользователь грохнет текст побегает табом по виджетам и будет немножко некрасиво.
ну да ладно.


Цитата(Litkevich Yuriy @ 4.3.2010, 18:55) *
kwisp, логика твоего примера имеет ошибку, т.к. когда пользователь начнёт писать, то оно не пусто, а надобы убрать "Введите Текст".


ну я честно скажу что не пробовал, однако текст("Введите текст!") же выделен и когда ты начнешь набирать по выделенному то он должен исчезнуть :) по идее.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
flankerr
  опции профиля:
сообщение 4.3.2010, 19:24
Сообщение #17


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

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

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




Репутация:   0  


kwisp, ну если из этих соображений тогда пожалуй да. Однако когда пользователь фокусируется на ТекстЭдете то уже не так важно ввёл что-то или нет - главное "потрогал".
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 9.7.2025, 10:20