Archived:Creating a custom custom line editor from QLineEdit
somnathbanik
(Talk | contribs) |
hamishwillee
(Talk | contribs) m (Hamishwillee - Bot change of template (Template:CodeSnippet) - now using Template:ArticleMetaData) |
||
| Line 1: | Line 1: | ||
[[Category:Qt]] | [[Category:Qt]] | ||
| − | {{ | + | {{ArticleMetaData |
|id= | |id= | ||
|platform= S60 5th Edition | |platform= S60 5th Edition | ||
| Line 8: | Line 8: | ||
|creationdate=21 November 2010 | |creationdate=21 November 2010 | ||
|keywords=QLineEdit | |keywords=QLineEdit | ||
| + | |||
| + | |sourcecode= <!-- Link to example source code (e.g. [[Media:The Code Example ZIP.zip]]) --> | ||
| + | |installfile= <!-- Link to installation file (e.g. [[Media:The Installation File.sis]]) --> | ||
| + | |sdk=<!-- SDK(s) built and tested against (e.g. [http://linktosdkdownload/ Nokia Qt SDK 1.1]) --> | ||
| + | |devicecompatability=<!-- Compatible devices (e.g.: All* (must have GPS) ) --> | ||
| + | |signing=<!-- Empty or one of Self-Signed, DevCert, Manufacturer --> | ||
| + | |capabilities=<!-- Capabilities required (e.g. Location, NetworkServices.) --> | ||
| + | |author=[[User:Skumar rao]] | ||
}} | }} | ||
==Overview== | ==Overview== | ||
Revision as of 12:25, 24 June 2011
Article Metadata
Tested with
Compatibility
Article
Contents |
Overview
This example shows how to derive our own Line Widget from QLineEdit. The QLineEdit widget is a one-line text editor. A line edit allows the user to enter and edit a single line of plain text with a useful collection of editing functions, including undo and redo, cut and paste, and drag and drop.
Prerequisites
- Qt 4.6.2 or above (tested ok with 4.7 too) Nokia Qt SDK with latest Update will do just fine
- A Qt & Data enabled device [Optional] we will use Qt Nokia SDK's Simulator.
Implementation
We will derive a class named QCustomEditLine
class QCustomEditLine : public QLineEdit
QCustomEditLine::QCustomEditLine(QWidget *parent) : QLineEdit(parent)
add a function to take the default text once we get it we will refresh the control to re-draw.
emptyMessage = msg;
drawEmptyMsg = text().isEmpty();
update();
derive paintEvent( QPaintEvent *ev ) to draw the text that we want to show when there is no text is entered.
QPainter p(this);
QFont f = font();
f.setItalic(true);
p.setFont(f);
QColor color(palette().color(foregroundRole()));
color.setAlphaF(0.5);
p.setPen(color);
QStyleOptionFrame opt;
initStyleOption(&opt);
QRect cr = style()->subElementRect(QStyle::SE_LineEditContents, &opt, this);
cr.setLeft(cr.left() + 2);
cr.setRight(cr.right() - 2);
p.drawText(cr, Qt::AlignLeft|Qt::AlignVCenter, emptyMessage);
control the drawing to show the default text when control is focused out and blank it when cointrol focused in.
now we are ready to add to our widget. to use for example
m_lineout = new QCustomEditLine(this);
m_lineout->setEmptyMessage("Enter you Email Address");
qcustomeditline.h
#ifndef QCUSTOMEDITLINE_H
#define QCUSTOMEDITLINE_H
#include <QtGui>
class QCustomEditLine : public QLineEdit
{
Q_OBJECT
public:
QCustomEditLine(QWidget *parent = 0);
virtual ~QCustomEditLine();
public:
void setEmptyMessage( const QString &msg );
protected:
void paintEvent( QPaintEvent *ev );
void focusInEvent( QFocusEvent *ev );
void focusOutEvent( QFocusEvent *ev );
private:
QString emptyMessage;
bool drawEmptyMsg;
};
#endif // QCUSTOMEDITLINE_H
qcustomeditline.cpp
#include "qcustomeditline.h"
QCustomEditLine::QCustomEditLine(QWidget *parent)
: QLineEdit( parent ){
}
QCustomEditLine::~QCustomEditLine() {
}
void QCustomEditLine::setEmptyMessage( const QString &msg ) {
emptyMessage = msg;
drawEmptyMsg = text().isEmpty();
update();
}
void QCustomEditLine::paintEvent( QPaintEvent *ev ) {
QLineEdit::paintEvent( ev );
if ( text().isEmpty() ) {
QPainter p(this);
QFont f = font();
f.setItalic(true);
p.setFont(f);
QColor color(palette().color(foregroundRole()));
color.setAlphaF(0.5);
p.setPen(color);
QStyleOptionFrame opt;
initStyleOption(&opt);
QRect cr = style()->subElementRect(QStyle::SE_LineEditContents, &opt, this);
cr.setLeft(cr.left() + 2);
cr.setRight(cr.right() - 2);
p.drawText(cr, Qt::AlignLeft|Qt::AlignVCenter, emptyMessage);
}
}
void QCustomEditLine::focusInEvent( QFocusEvent *ev ) {
if ( drawEmptyMsg ) {
drawEmptyMsg = false;
update();
}
QLineEdit::focusInEvent( ev );
}
void QCustomEditLine::focusOutEvent( QFocusEvent *ev ) {
if ( text().isEmpty() ) {
drawEmptyMsg = true;
update();
}
QLineEdit::focusOutEvent( ev );
}
Reference
- More on QLineEdit
- SDK
--skumar_rao
09:27, 21 November 2010 (UTC)

