Цитата(ksk- @ 4.4.2011, 5:01)
Всем привет. Такой вопрос. Есть объект типа QLineEdit, в нем по умолчанию текст. Как сделать так, чтобы при клике мышкой по этому полю текст, внутри него пропадал???
Если я тебя правильно понял то есть 2 способа:
1. переопределить mouseReleaseEvent() и при нажатии кнопкой любой - LineEdit->clear();
#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
#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. а если ты хочешь сделать чтобы висел текст(не такой как обычно туда можно ввести, а например большими буквами и др цветом) "введите сюда", ты тыкаешь и он исчезает то можно рисовать как то делал так:
#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
#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);
}
Если делать вторым способом то если допустим ты так и не захотел ничего вбивать в строку и перевел фокус, то этот текст опять появляется.