crossplatform.ru

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

> 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
Причина редактирования: Уточнил название темы
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Константин
  опции профиля:
сообщение 16.2.2009, 2:38
Сообщение #2


Студент
*

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

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




Репутация:   1  


всё это уже есть в SearchLineEdit - в доп.компонентах на prog.org.ru
скоро будет свежая версия...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
z0D5e8n7x
  опции профиля:
сообщение 23.3.2010, 1:05
Сообщение #3


Новичок


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

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




Репутация:   0  


Цитата(Константин @ 16.2.2009, 2:38) *
всё это уже есть в SearchLineEdit - в доп.компонентах на prog.org.ru
скоро будет свежая версия...


я тут сделал свой вариант попроще, мож кому сгодится
Раскрывающийся текст

#ifndef QWEBSTYLEEDIT_H
#define QWEBSTYLEEDIT_H

#include <QLineEdit>
#include <QColor>

class QWebStyleEdit : public QLineEdit
{
    Q_OBJECT
    Q_PROPERTY(QString grayedText READ grayedText WRITE setGrayedText)

    QString m_grText;
    QColor base,alternate;
    QColor text,brtext;
    bool modified;

    void setBackgroundColor(QColor);
    void setForegroundColor(QColor);
    void setItalic(bool);

public:
    QWebStyleEdit(QWidget * parent = 0, QString grText = QString());

    void setGrayedText(const QString &);
    QString grayedText() const;

    void setText(const QString &);
protected:
    void focusInEvent(QFocusEvent *);
    void focusOutEvent(QFocusEvent *e);
};

#endif // QWEBSTYLEEDIT_H


#include "qwebstyleedit.h"
#include <QPalette>

QWebStyleEdit::QWebStyleEdit(QWidget * parent,QString grText):QLineEdit(parent)
{
    setGrayedText(grText);
    base = palette().color(QPalette::Base);
    alternate = palette().color(QPalette::AlternateBase);
    text = palette().color(QPalette::Text);
    brtext = palette().color(QPalette::Midlight);
    setBackgroundColor(alternate);
    setForegroundColor(brtext);
    setItalic(true);
}

void QWebStyleEdit::setGrayedText(const QString &grText)
{
    m_grText=grText;
    if(QLineEdit::text().isEmpty())
        QLineEdit::setText(m_grText);
}

QString QWebStyleEdit::grayedText() const
{
    return m_grText;
}

void QWebStyleEdit::focusInEvent(QFocusEvent *e)
{
    QLineEdit::focusInEvent(e);
    setBackgroundColor(base);
    setForegroundColor(text);
    if(!modified)
        QLineEdit::setText("");
    setItalic(false);
}

void QWebStyleEdit::focusOutEvent(QFocusEvent *e)
{
    QLineEdit::focusOutEvent(e);
    setBackgroundColor(alternate);
    setForegroundColor(brtext);
    if(QLineEdit::text().isEmpty()){
        QLineEdit::setText(m_grText);
        modified = false;
        setItalic(true);
    } else {
        modified = true;
    }
}

void QWebStyleEdit::setBackgroundColor(QColor color)
{
    QPalette p = palette();
    p.setColor(QPalette::Base, color);
    setPalette(p);
}

void QWebStyleEdit::setForegroundColor(QColor color)
{
    QPalette p = palette();
    p.setColor(QPalette::Text, color);
    setPalette(p);
}

void QWebStyleEdit::setText(const QString &text)
{
    QLineEdit::setText(text);
    if(text.isEmpty())
        modified = false;
    else
        modified = true;
}

void QWebStyleEdit::setItalic(bool it)
{
    QFont fnt(font());
    fnt.setItalic(it);
    setFont(fnt);
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
z0D5e8n7x
  опции профиля:
сообщение 23.3.2010, 3:49
Сообщение #4


Новичок


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

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




Репутация:   0  


а блин, куча косяков

Раскрывающийся текст

#ifndef QWEBSTYLEEDIT_H
#define QWEBSTYLEEDIT_H

#include <QLineEdit>
#include <QColor>

class QWebStyleEdit : public QLineEdit
{
    Q_OBJECT
    Q_PROPERTY(QString grayedText READ grayedText WRITE setGrayedText)

    QString m_grText;
    QColor base,alternate;
    QColor fgtext,bgtext;
    bool modified;

    void setBackgroundColor(QColor);
    void setForegroundColor(QColor);
    void setItalic(bool);

public:
    QWebStyleEdit(QWidget * parent = 0, QString grText = QString());

    void setGrayedText(const QString &);
    QString grayedText() const;

    void setText(const QString &);
    QString text () const;
protected:
    void focusInEvent(QFocusEvent *);
    void focusOutEvent(QFocusEvent *e);
};

#endif // QWEBSTYLEEDIT_H

#include "qwebstyleedit.h"
#include <QPalette>

QWebStyleEdit::QWebStyleEdit(QWidget * parent,QString grText):QLineEdit(parent)
{
    setGrayedText(grText);
    base = palette().color(QPalette::Base);
    alternate = palette().color(QPalette::AlternateBase);
    fgtext = palette().color(QPalette::Text);
    bgtext = palette().color(QPalette::Midlight);
    setBackgroundColor(alternate);
    setForegroundColor(bgtext);
    setItalic(true);
    modified = false;
}

void QWebStyleEdit::setGrayedText(const QString &grText)
{
    m_grText=grText;
    if(QLineEdit::text().isEmpty())
        QLineEdit::setText(m_grText);
}

QString QWebStyleEdit::grayedText() const
{
    return m_grText;
}

void QWebStyleEdit::focusInEvent(QFocusEvent *e)
{
    QLineEdit::focusInEvent(e);
    setBackgroundColor(base);
    setForegroundColor(fgtext);
    if(!modified)
        QLineEdit::setText("");
    setItalic(false);
}

void QWebStyleEdit::focusOutEvent(QFocusEvent *e)
{
    QLineEdit::focusOutEvent(e);
    setBackgroundColor(alternate);
    setForegroundColor(bgtext);
    if(QLineEdit::text().isEmpty()){
        QLineEdit::setText(m_grText);
        modified = false;
        setItalic(true);
    } else {
        modified = true;
    }
}

void QWebStyleEdit::setBackgroundColor(QColor color)
{
    QPalette p = palette();
    p.setColor(QPalette::Base, color);
    setPalette(p);
}

void QWebStyleEdit::setForegroundColor(QColor color)
{
    QPalette p = palette();
    p.setColor(QPalette::Text, color);
    setPalette(p);
}

void QWebStyleEdit::setText(const QString &text)
{
    QLineEdit::setText(text);
    if(text.isEmpty())
        modified = false;
    else
        modified = true;
}

QString QWebStyleEdit::text() const
{
    if(modified)
        return QLineEdit::text();
    else
        return QString("");
}

void QWebStyleEdit::setItalic(bool it)
{
    QFont fnt(font());
    fnt.setItalic(it);
    setFont(fnt);
}

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- entmobile   QLineEdit, как сделать так, чтобы пока он пуст там появлялся текст?   4.2.2009, 10:11
- - ViGOur   Я думаю лучше это делать в paintEvent, примерно та...   4.2.2009, 11:06
|- - entmobile   Цитата(ViGOur @ 4.2.2009, 12:06) Я думаю ...   4.2.2009, 14:02
- - Tonal   focusInEvent, focusOutEvent. Оно?   4.2.2009, 11:17
- - Litkevich Yuriy   entmobile, в обработчиках событий можно просто уст...   4.2.2009, 11:40
- - SABROG   Цитата(ViGOur @ 4.2.2009, 11:06) Я думаю ...   4.2.2009, 11:41
- - kuler   hasFocus не пробовал?   4.2.2009, 11:45
- - Litkevich Yuriy   Цитата(SABROG @ 4.2.2009, 14:41) Отрисовк...   4.2.2009, 11:53
- - SABROG   Цитата(Litkevich Yuriy @ 4.2.2009, 11:53)...   4.2.2009, 11:59
- - Litkevich Yuriy   Цитата(SABROG @ 4.2.2009, 14:59) то это ч...   4.2.2009, 12:18
- - kuler   а почему focusInEvent, focusOutEvent не устроил?   4.2.2009, 12:32
- - ViGOur   Цитата(SABROG @ 4.2.2009, 11:41) Отрисовк...   4.2.2009, 13:13
|- - entmobile   Цитата(SABROG @ 4.2.2009, 11:41) Чем хоро...   4.2.2009, 13:25
- - Litkevich Yuriy   Цитата(entmobile @ 4.2.2009, 17:02) Вот н...   4.2.2009, 14:32
|- - trdm   Цитата(Litkevich Yuriy @ 4.2.2009, 14:32)...   4.2.2009, 16:04
|- - Sokoloff   Цитата(Litkevich Yuriy @ 4.2.2009, 14:32)...   26.3.2010, 13:17
- - kuler   Цитата(entmobile @ 4.2.2009, 13:25) Но ес...   4.2.2009, 15:26
- - Litkevich Yuriy   kuler, он так и сделал   4.2.2009, 15:30
- - Litkevich Yuriy   может быть, я с рисованием еще не работал. Так на ...   4.2.2009, 16:45
- - Константин   всё это уже есть в SearchLineEdit - в доп.компонен...   16.2.2009, 2:38
|- - z0D5e8n7x   Цитата(Константин @ 16.2.2009, 2:38) всё ...   23.3.2010, 1:05
|- - z0D5e8n7x   а блин, куча косяков Раскрывающийся текст #ifndef...   23.3.2010, 3:49
|- - z0D5e8n7x   чет у меня все криво и косо (( опять поправил - h...   30.3.2010, 18:19
- - novichkov   А можно просто подождать Qt 4.7 Там у QLineEdi...   25.3.2010, 20:46
- - Litkevich Yuriy   Цитата(Sokoloff @ 26.3.2010, 16:17) А чем...   26.3.2010, 13:24
- - KuZ   Вот возможно так: CODEclass LE : public QLineEdit ...   26.3.2010, 19:02
- - SABROG   В Qt 4.7 должен появится метод setPlaceholderText....   27.3.2010, 3:46


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


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




RSS Текстовая версия Сейчас: 27.11.2024, 5:57