Namespaces
Variants
Actions
Revision as of 13:52, 13 June 2012 by hamishwillee (Talk | contribs)

Archived:Creating a custom custom line editor from QLineEdit

Jump to: navigation, search

This example shows how to derive our own Line Widget from QLineEdit. QLineEdit 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.

Archived.png
Archived: This article is archived because it is not considered relevant for third-party developers creating commercial solutions today. If you think this article is still relevant, let us know by adding the template {{ReviewForRemovalFromArchive|user=~~~~|write your reason here}}.

Qt Quick should be used for all UI development on mobile devices. The approach described in this article (based on C++ for the Qt UI) deprecated.
Article Metadata

Tested with
SDK: Qt 4.6.2, Qt 4.7
Devices(s): Emulator

Compatibility
Platform(s): S60 5th Edition

Article
Keywords: QLineEdit
Created: skumar_rao (21 Nov 2010)
Last edited: hamishwillee (13 Jun 2012)

Contents

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 do the following:

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 );
}


CustomLineEdit.JPG CustomLineEdit2.JPG


Reference

413 page views in the last 30 days.
Nokia Developer aims to help you create apps and publish them so you can connect with users around the world.

京ICP备05048969号  © Copyright Nokia 2013 All rights reserved