crossplatform.ru

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

 
Тема закрытаНачать новую тему
> QLineEdit и мышка.
ksk-
  опции профиля:
сообщение 4.4.2011, 4:01
Сообщение #1


Новичок


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

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




Репутация:   0  


Всем привет. Такой вопрос. Есть объект типа QLineEdit, в нем по умолчанию текст. Как сделать так, чтобы при клике мышкой по этому полю текст, внутри него пропадал???
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
breeve
  опции профиля:
сообщение 4.4.2011, 4:50
Сообщение #2


Участник
**

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

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




Репутация:   1  


Цитата(ksk- @ 4.4.2011, 5:01) *
Всем привет. Такой вопрос. Есть объект типа QLineEdit, в нем по умолчанию текст. Как сделать так, чтобы при клике мышкой по этому полю текст, внутри него пропадал???
Если я тебя правильно понял то есть 2 способа:
1. переопределить mouseReleaseEvent() и при нажатии кнопкой любой - LineEdit->clear();
myLineEdit.h
#ifndef MYLINEEDIT_H
#define MYLINEEDIT_H

#include <QLineEdit>
#include <QMouseEvent>

class MyLineEdit : public QLineEdit
{
    Q_OBJECT
public:
    explicit MyLineEdit(const QString &str,QWidget *parent = 0);
protected:
    void mouseReleaseEvent(QMouseEvent *);

};

#endif // MYLINEEDIT_H
MyLineEdit.cpp
#include "mylineedit.h"

MyLineEdit::MyLineEdit(const QString & str, QWidget *parent) :
    QLineEdit(parent)
{
    this->setText(str);
}

void MyLineEdit::mouseReleaseEvent(QMouseEvent *e)
{
    if(e->button() != Qt::NoButton)
    {
        this->clear();
    }
}



2. а если ты хочешь сделать чтобы висел текст(не такой как обычно туда можно ввести, а например большими буквами и др цветом) "введите сюда", ты тыкаешь и он исчезает то можно рисовать как то делал так:

serchLine.h
#ifndef QSEARCHLINE_H
#define QSEARCHLINE_H

#include <QtGui>


class QSearchLine : public QLineEdit
{
public:
    QSearchLine(QString, QWidget *parent = 0);
private:
    QString str;
protected:
    void paintEvent(QPaintEvent *event);
};

#endif // QSEARCHLINE_H
serchLine.cpp
#include "qsearchline.h"

QSearchLine::QSearchLine(QString a, QWidget *parent) :
        QLineEdit(parent), str(a)
{
}

void QSearchLine::paintEvent(QPaintEvent *event)
{
    if( !this->hasFocus() && this->text().isEmpty())
    {
         QLineEdit::paintEvent(event);
         QPainter painter(this);
         painter.setPen(Qt::gray);
         painter.setFont(QFont("Arial", 12));
         painter.drawText(this->rect(), Qt::AlignCenter, str);
    }
    else QLineEdit::paintEvent(event);
}
Если делать вторым способом то если допустим ты так и не захотел ничего вбивать в строку и перевел фокус, то этот текст опять появляется.

Сообщение отредактировал breeve - 4.4.2011, 5:32
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 4.4.2011, 6:20
Сообщение #3


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

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

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




Репутация:   94  


ksk-, ищи по форуму, уже решено.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 8.7.2020, 16:30