1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
| #include <QtGui>
class maClass : public QWidget
{
public :
maClass(QWidget * parent = 0)
:QWidget(parent)
{
QVBoxLayout * l = new QVBoxLayout;
//aucun espace entre les element
l->setSpacing(0);
//pas de marge
l->setMargin(0);
setLayout(l);
//valide tout les nombre jusqu'a 30 chiffre
QRegExp validator("^\\d{0,30}$");
for (int i=0;i<10;++i)
{
QLineEdit * le = new QLineEdit;
//enleve les bordures
le->setFrame(false);
//filtrage des event pour le up dow et enter
le->installEventFilter(this);
//ce qui est entree doit etre valid
le->setValidator(new QRegExpValidator(validator,le));
l->addWidget(le);
}
setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
}
bool eventFilter ( QObject * watched, QEvent * event )
{
QLineEdit *le = qobject_cast<QLineEdit *>(watched);
//filtre les evenement dans les lineEdit pour changer de ligne aprés un UP, down ou enter
if (le && event->type() == QEvent::KeyPress)
{
QKeyEvent * kevent = static_cast<QKeyEvent*>(event);
if(kevent->key() == Qt::Key_Up)
{
int index =layout()->indexOf (le);
QLayoutItem * it = layout()->itemAt(index-1);
if (it)
{
it->widget()->setFocus (Qt::OtherFocusReason);
return true;
}
}
if
(
kevent->key() == Qt::Key_Down
||
kevent->key() == Qt::Key_Enter
||
kevent->key() == Qt::Key_Return
)
{
int index =layout()->indexOf (le);
QLayoutItem * it = layout()->itemAt(index+1);
if (it)
{
it->widget()->setFocus (Qt::OtherFocusReason);
return true;
}
}
}
return QWidget::eventFilter (watched,event );
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
maClass w;
w.show();
return a.exec();
} |