Az új felhasználó felvétele, felhasználó adatainak módosítása, környezeti változók beállításának leprogramozása igazi unalmas favágómunka. Egy dialog-ot (új felhasználó felvétele) legyártottam, és a többit ennek mintájára készítettem el. Például egyforma a konstruktoruk:
NewUserForm::NewUserForm(QSqlDatabase db_leiro_ptr, QHash<QString, QString> *hash_ptr) {
widget.setupUi(this);
const QRect screen = QApplication::desktop()->screenGeometry(0);
this->move(screen.center()-QPoint(this->width()/2,this->height()/2));
hash = hash_ptr;
tetlen_ido = hash->value("tetlen_ido").toInt();
tetlen_timer.start(tetlen_ido * 1000, this);
db_leiro = db_leiro_ptr;
widget.nev->setFocus();
A 2. és 3. sor beállítja a form-ot a képernyő közepére.
A hash táblában - mint egyedüli osztályok közti adatcsatornában - átadhatom a form bezárási idejét, ha nincs egérmozgás és a belépett felhasználó azonosítóját mondjuk logolás miatt. A MainClass-ban dinamikus pointerrel hoztam létre a hash táblát.
QPalette p = palette();
p.setColor(QPalette::Base, QColor(qRgb(0xFF, 0xFF, 0xFF)));
p.setColor(QPalette::AlternateBase, QColor(qRgb(0xD5, 0xEA, 0xFF)));
widget.tableView->setPalette(p);
Tableview sorait két különböző háttérszínnel váltakozva jelenítem meg.
QSqlQueryModel *model = new QSqlQueryModel;
model->setQuery("select felh_nev from felhasznalok", db_leiro);
widget.tableView->setModel(model);
widget.tableView->show();
Feltöltöm a tableview-t adatokkal. A select-ben meghatározott mezők adják a sorok,cellák tartalmát. Majd minden megjelenítő widget-hez lehet model-t rendelni. Ez igen hasznos, mert így pl. nem kell egy listview feltöltését ciklusban végezni.
void NewUserForm::mouseMoveEvent(QMouseEvent* event) {
tetlen_timer.stop();
tetlen_timer.start(tetlen_ido * 1000, this);
}
void NewUserForm::timerEvent(QTimerEvent* event) {
done(0);
}
Egérmozgás, timer ütemeinek figyelése
QString munka = QFileDialog::getExistingDirectory(this, trUtf8("Output könyvtár kiválasztása"), "/home", QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
widget.out_konyvtar->setText(munka);
Könyvtár kiválasztása QFileDialog segítségével
Mint írtam, a konstruktor, egérmozgás figyelése, timer ütemezése mindegyik dialog form-nál egyforma. Így tulajdonképpen másolással, egy template alkalmazásával gyorsan tudok új modal form-okat létrehozni, csak a funkciónak megfelelő változásokat programozom le. De ebben is sokat segít a copy-paste, mert a hibaüzenetek felépítése is egyforma, csak a szöveg változik.
Ami minden felhasználói adatbevitelnél nagyon fontos:
- a felhasználó hazudik
- a felhasználó össze - vissza nyomkod minden gombot
- a felhasználó sátáni örömet érez, ha kiakasztja a programot
- a felhasználó türelmetlen
- a felhasználó nem tud olvasni
- a felhasználó pontosan követte a program utasításait
- a felhasználó találékony
tehát minden adatbevitelt alaposan ellenőrizzünk, ígyekezzünk bolondbiztos programot írni.