Archived:Creating a custom custom line editor from QLineEdit
hamishwillee
(Talk | contribs) m (Text replace - "Category:MeeGo" to "Category:MeeGo Harmattan") |
hamishwillee
(Talk | contribs) m (Text replace - "<code cpp>" to "<code cpp-qt>") |
||
| (2 intermediate revisions by one user not shown) | |||
| Line 1: | Line 1: | ||
| + | {{Archived|timestamp=20120302032925|user=[[User:Hamishwillee|<br />----]]|[[:Category:Qt Quick|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.}} | ||
[[Category:MeeGo Harmattan]][[Category:Symbian]][[Category:Qt C++ UI]] | [[Category:MeeGo Harmattan]][[Category:Symbian]][[Category:Qt C++ UI]] | ||
{{Abstract|This example shows how to derive our own Line Widget from {{Qapiname|QLineEdit}}.}} {{Qapiname|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. | {{Abstract|This example shows how to derive our own Line Widget from {{Qapiname|QLineEdit}}.}} {{Qapiname|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. | ||
| − | |||
{{ArticleMetaData <!-- v1.2 --> | {{ArticleMetaData <!-- v1.2 --> | ||
|sourcecode= <!-- Link to example source code (e.g. [[Media:The Code Example ZIP.zip]]) --> | |sourcecode= <!-- Link to example source code (e.g. [[Media:The Code Example ZIP.zip]]) --> | ||
| Line 29: | Line 29: | ||
We will derive a class named {{Icode|QCustomEditLine}} | We will derive a class named {{Icode|QCustomEditLine}} | ||
| − | <code cpp> | + | <code cpp-qt> |
class QCustomEditLine : public QLineEdit | class QCustomEditLine : public QLineEdit | ||
| Line 35: | Line 35: | ||
Add a function to take the default text once we get it we will refresh the control to re-draw. | Add a function to take the default text once we get it we will refresh the control to re-draw. | ||
| − | <code cpp> | + | <code cpp-qt> |
emptyMessage = msg; | emptyMessage = msg; | ||
drawEmptyMsg = text().isEmpty(); | drawEmptyMsg = text().isEmpty(); | ||
| Line 43: | Line 43: | ||
Derive {{Icode|paintEvent( QPaintEvent *ev )}} to draw the text that we want to show when there is no text is entered. | Derive {{Icode|paintEvent( QPaintEvent *ev )}} to draw the text that we want to show when there is no text is entered. | ||
| − | <code cpp> | + | <code cpp-qt> |
QPainter p(this); | QPainter p(this); | ||
QFont f = font(); | QFont f = font(); | ||
| Line 65: | Line 65: | ||
Now we are ready to add to our widget. To use do the following: | Now we are ready to add to our widget. To use do the following: | ||
| − | <code cpp> | + | <code cpp-qt> |
m_lineout = new QCustomEditLine(this); | m_lineout = new QCustomEditLine(this); | ||
m_lineout->setEmptyMessage("Enter you Email Address"); | m_lineout->setEmptyMessage("Enter you Email Address"); | ||
| Line 73: | Line 73: | ||
== qcustomeditline.h == | == qcustomeditline.h == | ||
| − | <code cpp> | + | <code cpp-qt> |
#ifndef QCUSTOMEDITLINE_H | #ifndef QCUSTOMEDITLINE_H | ||
#define QCUSTOMEDITLINE_H | #define QCUSTOMEDITLINE_H | ||
| Line 105: | Line 105: | ||
== qcustomeditline.cpp == | == qcustomeditline.cpp == | ||
| − | <code cpp> | + | <code cpp-qt> |
#include "qcustomeditline.h" | #include "qcustomeditline.h" | ||
Latest revision as of 04:14, 11 October 2012
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.
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.
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.
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
(11 Oct 2012)
Contents |
Implementation
We will derive a class named QCustomEditLine
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 );
}

