Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: QLineEdit и мышка.
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt GUI
ksk-
Всем привет. Такой вопрос. Есть объект типа QLineEdit, в нем по умолчанию текст. Как сделать так, чтобы при клике мышкой по этому полю текст, внутри него пропадал???
breeve
Цитата(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);
}
Если делать вторым способом то если допустим ты так и не захотел ничего вбивать в строку и перевел фокус, то этот текст опять появляется.
Litkevich Yuriy
ksk-, ищи по форуму, уже решено.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.