crossplatform.ru

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

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


Новичок


Группа: Новичок
Сообщений: 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);
}

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
novichkov
  опции профиля:
сообщение 25.3.2010, 20:46
Сообщение #22


Студент
*

Группа: Участник
Сообщений: 64
Регистрация: 20.3.2008
Из: Северодвинск
Пользователь №: 128

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




Репутация:   1  


А можно просто подождать Qt 4.7 :D Там у QLineEdit есть property placeholderText. Этот код уже есть в исходных текстах SDK Qt 4.6 windows.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Sokoloff
  опции профиля:
сообщение 26.3.2010, 13:17
Сообщение #23


Участник
**

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

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




Репутация:   11  


Цитата(Litkevich Yuriy @ 4.2.2009, 14:32) *
Цитата(entmobile @ 4.2.2009, 17:02) *
Вот немного поправил твой вариант!!! Спасибо огромное!!
Эдик предлагал использовать событие перерисовки родительского виджета, и это более удачный вариант чем твой
А чем рисование в родителе лучше чем самообслуживающийся виджет?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 26.3.2010, 13:24
Сообщение #24


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

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

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




Репутация:   94  


Цитата(Sokoloff @ 26.3.2010, 16:17) *
А чем рисование в родителе лучше чем самообслуживающийся виджет?
тем, что можно взять произвольный виджет, а не только QLineEdit
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
KuZ
  опции профиля:
сообщение 26.3.2010, 19:02
Сообщение #25


Студент
*

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

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




Репутация:   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
  опции профиля:
сообщение 27.3.2010, 3:46
Сообщение #26


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

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

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




Репутация:   34  


В Qt 4.7 должен появится метод setPlaceholderText. В Qt 4.6 он уже реализован, но не доступен. Видимо тролли нас хотят удивить, ну или еще не все отладили. Метод работает, но достучаться можно только через хак:

#include "private/qlineedit_p.h"
...
namespace Hack { template <class To, class From> inline To* d_ptr(From* ptr){ return (To*)QObjectPrivate::get(ptr);}}
...
Hack::d_ptr<QLineEditPrivate>(ui->lineEdit)->placeholderText = "Test";
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
z0D5e8n7x
  опции профиля:
сообщение 30.3.2010, 18:19
Сообщение #27


Новичок


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

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




Репутация:   0  


чет у меня все криво и косо ((

опять поправил - http://z0d5e8n7x.ru/blog/2010/03/24/qlineedit-v-stile-web/
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




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