Důvody, proč kontrolovat to, co uživatel zadá, jsou v celku jasné. I když totiž například vytvoříte vstupní prvek a označíte ho jako email, vždy se může najít někdo, kdo vaše instrukce zcela nepochopí a vloží zde úplně jiný údaj. Problém pak samozřejmě nastane, jakmile začnete s takovou hodnotou pracovat. Výsledkem pak mohou být docela kuriózní situace.

Třída QintValidator

Způsobů, jak zkontrolovat zadaná data je pochopitelně několik. Ukážeme si však postup, který nezabere mnoho času a zvládne jej i začátečník. V rámci tohoto jednoduchého příkladu jsem se rozhodl vytvořit okno, ve kterém na nás bude po inicializaci čekat jeden lineEdit a Label, který vysvětlí, jaký vstup vyžadujeme.

lineEdit - validace

Práci v designérském módu určitě zvládnete, stačí jen přidat oba prvky a vhodně je pojmenovat. Mnohem zajímavější činnost začíná ve třídě, která přísluší otevíranému oknu. Zde našemu lineEditu nastavíme validátor, který se postará o omezení rozsahu zadávaných hodnot. Nejprve ho však musíme vytvořit. K tomuto kroku přistoupíme v konstruktoru zvolené třídy, protože pochopitelně chceme, aby ke kontrole údajů docházelo vždy.

 C++ (QT) |  copy code |? 
01
#include "widget.h"
02
#include "ui_widget.h"
03
#include <QIntValidator>
04
 
05
Widget::Widget(QWidget *parent) :
06
    QWidget(parent),
07
    ui(new Ui::Widget)
08
{
09
    ui->setupUi(this);
10
 
11
    QIntValidator * validator;
12
    validator = new QIntValidator(0,100,this);
13
 
14
    ui->lineEdit->setValidator(validator);
15
}
16
 
17
Widget::~Widget()
18
{
19
    delete ui;
20
}

Světe div se, máme hotovo. Pokud svůj program nyní zkompilujete, zjistíte, že nic jiného než integerové číslo v rozmezí 0 až 100 do lineEditu skutečně nelze zapsat. Konstruktor objektu QintValidator je pochopitelně přetížený, a proto pokud potřebujete, můžete stanovený limit velmi jednoduše odstranit. Stačí, když příslušný řádek zaměníte za tento:

 C++ (QT) |  copy code |? 
1
validator = new QIntValidator(this);

Stále budete těžit z toho, že uživatel dokáže vložit jen platné integerové číslo. Ovšem nezapomeňte, že nyní již může jít i do záporných hodnot. Uvedené řešení se proto nehodí v případě, kdy očekáváte pouze kladný rozsah. Jako zajímavý způsob řešení uvedené situace se mi jeví stanovení horní hranice na konstantu INT_MAX, která symbolizuje maximální hodnotu integeru, což pro naše účely plně postačuje.

 C++ (QT) |  copy code |? 
1
validator = new QIntValidator(0,INT_MAX,this);

Příchozí dotazy:

  • Přidat komentář Jméno Zadejte validační kód
  • regexvalidator lineedit marche pas
  • “PŘIDAT KOMENTÁŘ” ”Jméno” ”Zadejte validační KOD:
  • Komentáře” “Přidat komentář” ” Jméno:” ” Validační kód:” ” Zadejte validační kód:”
  • regularexpressionvalidator validace čísla
© 2012 IT blog Suffusion theme by Sayontan Sinha