crossplatform.ru

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

3 страниц V   1 2 3 >  
Ответить в данную темуНачать новую тему
> QLineEdit, как сделать так, чтобы пока он пуст там появлялся текст?
entmobile
  опции профиля:
сообщение 4.2.2009, 10:11
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 8.12.2008
Пользователь №: 444

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




Репутация:   0  


Вопрос по lineEdit: как узнать когда он в фокусе а когда нет? Пытался написать свое класс на основе QLineEdit и из focusEventов емитеть сигнал, нечего не получилось!:( Может есть более корректное решение? В итоге мне надо сделать следующее: если LineEdit пуст там появляется текст, при клике(табуляции) туда текст исчезает :)))

#include <QLineEdit>
#include <QFocusEvent>

class authEdit : public QLineEdit
{
Q_OBJECT
public:
    authEdit(QWidget *parent = 0);

signals:
    void onEnterEvent();
    void onLeaveEvent();


protected:
    bool enterFlag;
    void focusInEvent (QFocusEvent *event );
    void focusOutEvent ( QFocusEvent *event);
};


#include "authedit.h"

authEdit::authEdit(QWidget *parent)
        : QLineEdit (parent)
{
    enterFlag=false;
}

void authEdit::focusInEvent (QFocusEvent *event )
{
   if (!enterFlag) {
       emit onEnterEvent();
       enterFlag=true;
   }
}

void authEdit::focusOutEvent ( QFocusEvent *event)
{
    if (enterFlag) {
        emit onLeaveEvent();
        enterFlag=false;
    }
}


Сообщение отредактировал Litkevich Yuriy - 11.2.2009, 20:00
Причина редактирования: Уточнил название темы
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 4.2.2009, 11:06
Сообщение #2


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

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




Репутация:   40  


Я думаю лучше это делать в paintEvent, примерно так:
void CMyClass::paintEvent(QPaintEvent *)
{
    if( !pEdit->hasFocus() && pEdit->text().isEmpty())
    {
         QPainter painter( pEdit);
         painter.setPen(Qt::gray);
         painter.setFont(QFont("Arial", 12));
         painter.drawText(pEdit->rect(), Qt::AlignCenter, "Введите текст");
    }
}


Сообщение отредактировал ViGOur - 4.2.2009, 11:06
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 4.2.2009, 11:17
Сообщение #3


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

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

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




Репутация:   17  


focusInEvent, focusOutEvent. Оно?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 4.2.2009, 11:40
Сообщение #4


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

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

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




Репутация:   94  


entmobile, в обработчиках событий можно просто устанавливать/удалять текст:
void authEdit::focusInEvent (QFocusEvent *event )
{
    setText("");
}

void authEdit::focusOutEvent ( QFocusEvent *event)
{
    setText("Type here");
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 4.2.2009, 11:41
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

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




Репутация:   34  


Цитата(ViGOur @ 4.2.2009, 11:06) *
Я думаю лучше это делать в paintEvent, примерно так:

Отрисовка виджета в чужом paintEvent'e :o: ?

Только лучше не сбрасывать текст и не перезаписывать, если он пользовательский. А то обидется юзер, когда сообщение по аське придет :)

Сообщение отредактировал SABROG - 4.2.2009, 11:46
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 4.2.2009, 11:45
Сообщение #6


Танцор диско
***

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

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




Репутация:   -1  


hasFocus не пробовал?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 4.2.2009, 11:53
Сообщение #7


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

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

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




Репутация:   94  


Цитата(SABROG @ 4.2.2009, 14:41) *
Отрисовка виджета в чужом paintEvent'e
не виджета, а всего лиш текста нарисованого на виджете, ведь это подсказка типа "напишите ваше имя"
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 4.2.2009, 11:59
Сообщение #8


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

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




Репутация:   34  


Цитата(Litkevich Yuriy @ 4.2.2009, 11:53) *
Цитата(SABROG @ 4.2.2009, 14:41) *
Отрисовка виджета в чужом paintEvent'e
не виджета, а всего лиш текста нарисованого на виджете, ведь это подсказка типа "напишите ваше имя"

Да, но тут явная передача чужого виджета в painter. По идее на такое дебаг сообщение должно выводится или не работать совсем. А если просто поверх рисовать в главном окне, то это чревато тем, что при скрытом edit'е текст нарисуется где-нибудь на другом контроле, например при переключении tab'ов.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 4.2.2009, 12:18
Сообщение #9


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

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

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




Репутация:   94  


Цитата(SABROG @ 4.2.2009, 14:59) *
то это чревато тем, что при скрытом edit'е текст нарисуется где-нибудь на другом контроле
ну програмист должен отдавать себе отчет в том, что он делает. Это лишь пример, и здается мне лучший из приведенных.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 4.2.2009, 12:32
Сообщение #10


Танцор диско
***

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

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




Репутация:   -1  


а почему focusInEvent, focusOutEvent не устроил?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 30.11.2024, 12:21