crossplatform.ru

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

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


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

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

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




Репутация:   40  


Цитата(SABROG @ 4.2.2009, 11:41) *
Отрисовка виджета в чужом paintEvent'e :o: ?
Почему нет? Может я просто мало рисовал в Qt и чего-то не понимаю? (я и правда мало рисовал)

Чем хорошо именно рисование на виджете, так это тем, что мы не трогаем текст виджета. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
entmobile
  опции профиля:
сообщение 4.2.2009, 13:25
Сообщение #12


Новичок


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

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




Репутация:   0  


Цитата(SABROG @ 4.2.2009, 11:41) *
Чем хорошо именно рисование на виджете, так это тем, что мы не трогаем текст виджета. :)

В этом ты прав!!! Но если переписывать paintevent у lineedit то придеться полностью его перерисовывать: текст в нем и т.д. или есть вариант что бы дорисовать то что надо а остальное оставить? пока помог вариант с выводом текста в focusEvent`ах.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
entmobile
  опции профиля:
сообщение 4.2.2009, 14:02
Сообщение #13


Новичок


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

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




Репутация:   0  


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


Вот немного поправил твой вариант!!! Спасибо огромное!!
CODE

void authEdit::paintEvent(QPaintEvent *event)
{
if (text().isEmpty() && !hasFocus() && !inactiveText.isEmpty()) { //можно и без hasFocus, так даже интереснее будет
QLineEdit::paintEvent(event);
QPainter painter(this);
painter.setPen(Qt::gray);
painter.setFont(QFont("Arial", 12));
painter.drawText(rect(), Qt::AlignCenter, inactiveText);
} else
QLineEdit::paintEvent(event);
}

P.S. authEdit это класс наследник от QLineEdit.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 4.2.2009, 14:32
Сообщение #14


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

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

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




Репутация:   94  


Цитата(entmobile @ 4.2.2009, 17:02) *
Вот немного поправил твой вариант!!! Спасибо огромное!!
Эдик предлагал использовать событие перерисовки родительского виджета, и это более удачный вариант чем твой

С другой стороны, твой вариант хорош тем, что можно сделать наследника от QLineEdit намногие случаи жизни с таким поведением

entmobile, для твоего случая можно такую модернизацию провести:
        //painter.setFont(QFont("Arial", 12));
        painter.setFont(this->font());
дабы не было жестко зашитого в код размера шрифта
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 4.2.2009, 15:26
Сообщение #15


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

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

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




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


Цитата(entmobile @ 4.2.2009, 13:25) *
Но если переписывать paintevent у lineedit то придеться полностью его перерисовывать: текст в нем и т.д. или есть вариант что бы дорисовать то что надо а остальное оставить?

вызвать родительский метод
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 4.2.2009, 15:30
Сообщение #16


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

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

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




Репутация:   94  


kuler, он так и сделал
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
trdm
  опции профиля:
сообщение 4.2.2009, 16:04
Сообщение #17


Дмитрий Трошин
****

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

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




Репутация:   6  


Цитата(Litkevich Yuriy @ 4.2.2009, 14:32) *
entmobile, для твоего случая можно такую модернизацию провести:
        //painter.setFont(QFont("Arial", 12));
        painter.setFont(this->font());
дабы не было жестко зашитого в код размера шрифта

а мне ихмается что это уже делает
QPainter painter(this);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 4.2.2009, 16:45
Сообщение #18


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

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

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




Репутация:   94  


может быть, я с рисованием еще не работал. Так на удачу воткнул
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Константин
  опции профиля:
сообщение 16.2.2009, 2:38
Сообщение #19


Студент
*

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

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




Репутация:   1  


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


Новичок


Группа: Новичок
Сообщений: 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);
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




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