crossplatform.ru

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


  Ответ в QLineEdit, как сделать так, чтобы пока он пуст там появлялся текст?
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
z0D5e8n7x Дата 30.3.2010, 18:19
  чет у меня все криво и косо ((

опять поправил - http://z0d5e8n7x.ru/blog/2010/03/24/qlineedit-v-stile-web/
SABROG Дата 27.3.2010, 3:46
  В 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";
KuZ Дата 26.3.2010, 19:02
  Вот возможно так:
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, то "ошибка" чето придумать можно чтоб подобный вариант работал.
Litkevich Yuriy Дата 26.3.2010, 13:24
 
Цитата(Sokoloff @ 26.3.2010, 16:17) *
А чем рисование в родителе лучше чем самообслуживающийся виджет?
тем, что можно взять произвольный виджет, а не только QLineEdit
Sokoloff Дата 26.3.2010, 13:17
 
Цитата(Litkevich Yuriy @ 4.2.2009, 14:32) *
Цитата(entmobile @ 4.2.2009, 17:02) *
Вот немного поправил твой вариант!!! Спасибо огромное!!
Эдик предлагал использовать событие перерисовки родительского виджета, и это более удачный вариант чем твой
А чем рисование в родителе лучше чем самообслуживающийся виджет?
novichkov Дата 25.3.2010, 20:46
  А можно просто подождать Qt 4.7 :D Там у QLineEdit есть property placeholderText. Этот код уже есть в исходных текстах SDK Qt 4.6 windows.
z0D5e8n7x Дата 23.3.2010, 3:49
  а блин, куча косяков

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

#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);
}

z0D5e8n7x Дата 23.3.2010, 1:05
 
Цитата(Константин @ 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);
}
Константин Дата 16.2.2009, 2:38
  всё это уже есть в SearchLineEdit - в доп.компонентах на prog.org.ru
скоро будет свежая версия...
Litkevich Yuriy Дата 4.2.2009, 16:45
  может быть, я с рисованием еще не работал. Так на удачу воткнул
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 13:33