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.

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.
| 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:
| 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.
| 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