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.
#include „widget.h“
#include „ui_widget.h“
#include
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
QIntValidator * validator;
validator = new QIntValidator(0,100,this);
ui->lineEdit->setValidator(validator);
}
Widget::~Widget()
{
delete ui;
}
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:
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.
validator = new QIntValidator(0,INT_MAX,this);
Příchozí dotazy:
- Přidat komentář Jméno Zadejte validační kód