Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КП - 2 часть - Лекция 3. Знакомство с QT.docx
Скачиваний:
27
Добавлен:
11.05.2015
Размер:
695.85 Кб
Скачать

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 Добавление, удаление данных в таблицах

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

Для использования табличных данных в 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;

}

Код примера.

5 Компоновка (Layout)

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

Эти элементы автоматически корректируют размер элементов управления в зависимости от данных на них и от условий, в которых приложение оказалось.

Создадим новое приложение, кинем на него, например GridLayoutи начнем перетаскивать с панели инструментов внутрь него элементы управления. Если нужно, чтобы контролы располагались с определенной стороны, то можете броситьspacer-ы. Если нужно, чтобы контрол несколько колонок занимал, то его можно протянуть мышкой (в видео показано, как это сделать для диалога ввода возраста).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]