- •2 Часть
- •План лекции
- •1 Как работает оконное приложение вWindows
- •2 Добро пожаловать вQt
- •2.1 Сигналы и слоты
- •2.2 Как обратиться из кода обработчика к элементам управления
- •2.2.1 Именование элементов управления
- •2.2.2 Практика
- •2.3 Как показать сообщение
- •2.3.1 Текст заголовков окон
- •2.3.2 Практика
- •2.4Htmlтеги
- •3.1 Создание дополнительных окон
- •3.2 Передача данных окнам
- •Void Initialize(int age);
- •Void InputAgeDialog::Initialize(int age)
- •3.3 Получение данных от формы
- •Int GetAge() const;
- •Virtual void done(int code);
- •If (!ageIsInt)
- •5 Компоновка (Layout)
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-ы. Если нужно, чтобы контрол несколько колонок занимал, то его можно протянуть мышкой (в видео показано, как это сделать для диалога ввода возраста).