Проверка данных в диалоге

В виду ограниченности времени валидаторы не будут рассматриваться. Эту тему можете посмотреть дома.

Когда пользователь нажимает на ОК, он хочет, чтобы его данные были приняты приложением. Как проверить, что введенные данные корректны?

Перекрываем метод done в InputAgeDialog.h и добавляем метод по проверке данных.

#ifndef INPUTAGEDIALOG_H

#define INPUTAGEDIALOG_H

#include <QDialog>

namespace Ui {

class InputAgeDialog;

}

class InputAgeDialog: public QDialog

{

Q_OBJECT

public:

explicit InputAgeDialog(QWidget *parent = 0);

~ InputAgeDialog ();

void Initialize(int age);

int GetAge() const;

virtual void done (int code);

private:

Ui::InputAgeDialog *ui;

bool CheckData();

};

#endif // INPUTAGEDIALOG_H

InputAgeDialog.cpp:

#include "inputagedialog.h"

#include "ui_inputagedialog.h"

#include <QMessageBox>

InputAgeDialog::InputAgeDialog(QWidget *parent):

QDialog(parent),

ui(new Ui::InputAgeDialog)

{

ui->setupUi(this);

}

void InputAgeDialog::Initialize(int age)

{

ui->m_inputTextLineEdit->setText(QString::number(age));

}

InputAgeDialog::~ InputAgeDialog ()

{

delete ui;

}

int InputAgeDialog::GetAge() const

{

return ui->m_inputTextLineEdit->text().toInt();

}

Bool InputAgeDialog::CheckData()

{

bool ageIsInt;

ui->m_inputTextLineEdit->text().toInt(&ageIsInt);

if (!ageIsInt)

{

QMessageBox::critical(

This,

"Ошибка - CoolApplication",

"Введенный возраст не правильный.\n\nВозраст должен быть <b>положительным</b>.");

return false;

}

return true;

}

void InputAgeDialog:: done (int code)

{

if (code == QDialog::Accepted) // нажали ОК или вызвали метод Accept()

{

If (CheckData()) // если данные корректны, то тогда вызываем реализацию метода от базового класса

QDialog:: done (code);

}

Else

{

QDialog:: done (code);

}

}

Решение вложено как файл.

4 Добавление, удаление данных в таблицах

Большинство финансовых приложений легко опознать по дереву элементов слева и двум таблицам справа. Без изучения работы с таблицами знакомство с QT GUI будет не полным.

Для использования табличных данных в Qt есть элемент управления QTableView. Кинем его на форму и назовем m_tableView.

Код MainWindow.h:

#ifndef MAINWINDOW_H

#define MAINWINDOW_H

#include <QMainWindow>

#include <QStandardItemModel>

namespace Ui {

class MainWindow;

}

class MainWindow: public QMainWindow

{

Q_OBJECT

public:

explicit MainWindow(QWidget *parent = 0);

~ MainWindow ();

private:

Ui::MainWindow *ui;

QStandardItemModel *m_model;

};

#endif // MAINWINDOW_H

Код MainWindow.cpp:

#include "mainwindow.h"

#include "ui_mainwindow.h"

#include <QStandardItemModel>

MainWindow::MainWindow(QWidget *parent):

QMainWindow(parent),

ui(new Ui::MainWindow)

{

ui->setupUi(this);

m_model = new QStandardItemModel(5, 2, this);

m_model->setHorizontalHeaderItem(0, new QStandardItem(QString("First Name")));

m_model->setHorizontalHeaderItem(1, new QStandardItem(QString("Age")));

m_model->setRowCount(4);

m_model->setItem(0, 0, new QStandardItem("John"));

m_model->setItem(0, 1, new QStandardItem("26"));

m_model->setItem(1, 0, new QStandardItem("Alex"));

m_model->setItem(1, 1, new QStandardItem("56"));

m_model->setItem(2, 0, new QStandardItem("Ibragim"));

m_model->setItem(2, 1, new QStandardItem("54"));

m_model->setItem(3, 0, new QStandardItem("Ivan"));

m_model->setItem(3, 1, new QStandardItem("77"));

ui->m_tableView-> setModel (m_model);

// удаление ряда.

m_model->removeRow(2);

// добавление ряда

m_model->setItem(3, 0, new QStandardItem("Новый Ряд"));

m_model->setItem(3, 1, new QStandardItem("13"));

m_model->setItem(4, 0, new QStandardItem("Еще один новый Ряд"));

m_model->setItem(4, 1, new QStandardItem("666"));

// как получить выделенные ряды

QModelIndexList indexes = ui->m_tableView->selectionModel()->selection().indexes();

for (int i = 0; i < indexes.count(); ++i)

{

QModelIndex index = indexes.at(i);

int rowIndex = index.row();

int columnIndex = index.column();

}

}

MainWindow::~ MainWindow ()

{

delete ui;

delete m_model;

}

Код примера.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: