SlideShare uma empresa Scribd logo
1 de 13
Baixar para ler offline
Темы лекции: Паттерн MVP на Qt.
Практическое задание: Паттерн MVP на Qt.
Тренер: Игорь Шкулипа, к.т.н.
С++ Библиотеки STL и Qt. Занятие 4
http://www.slideshare.net/IgorShkulipa 2
Проект «Окно логина»
http://www.slideshare.net/IgorShkulipa 3
Класс «Модель». Файл model.h
#ifndef MODEL_H
#define MODEL_H
#include <QObject>
#include <QMap>
#include <QString>
class Model: public QObject
{
Q_OBJECT
private:
QMap<QString,QString> usersAndPasswords;
public:
Model();
QList<QString> GetUsers();
QString TryToLogin(QString user, QString password);
};
#endif // MODEL_H
http://www.slideshare.net/IgorShkulipa 4
Класс «Презентер». Файл presenter.h
#ifndef PRESENTER_H
#define PRESENTER_H
#include <QObject>
#include "iview.h"
#include "model.h"
class Presenter: public QObject
{
Q_OBJECT
private:
IView* view;
Model* model;
public:
Presenter();
Presenter(IView* newView);
private slots:
void UpdateUsers();
void Login();
};
#endif // PRESENTER_H
http://www.slideshare.net/IgorShkulipa 5
Интерфейс «Вид». Файл iview.h
#ifndef IVIEW_H
#define IVIEW_H
#include <QString>
#include <QList>
class IView
{
public:
virtual QString GetUser()=0;
virtual QString GetPassword()=0;
virtual void UpdateUsers(QList<QString> users)=0;
virtual void ShowMessage(QString message)=0;
public:
virtual void onLogin()=0;
virtual void onListUpdate()=0;
};
#endif // IVIEW_H
http://www.slideshare.net/IgorShkulipa 6
Реализация интерфейса. Файл mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "iview.h"
namespace Ui { class MainWindow;}
class MainWindow : public QMainWindow, public Iview {
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
virtual QString GetUser();
virtual QString GetPassword();
virtual void UpdateUsers(QList<QString> users);
virtual void ShowMessage(QString message);
signals:
void onLogin();
void onListUpdate();
private slots:
void on_pushButton_clicked();
void on_listWidget_activated(const QModelIndex &index);
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
http://www.slideshare.net/IgorShkulipa 7
Реализация модели. Файл model.cpp
#include "model.h"
Model::Model() {
usersAndPasswords.insert("User1", "Password1");
usersAndPasswords.insert("User2", "Password2");
usersAndPasswords.insert("User3", "Password3");
usersAndPasswords.insert("User4", "Password4");
usersAndPasswords.insert("User5", "Password5");
}
QList<QString> Model::GetUsers(){
return usersAndPasswords.keys();
}
QString Model::TryToLogin(QString user, QString password){
if (usersAndPasswords.contains(user)) {
int index=usersAndPasswords.keys().indexOf(user);
if (usersAndPasswords.values().at(index) == password)
{
return "Login Successful!";
}
}
return "Login Failed.";
}
http://www.slideshare.net/IgorShkulipa 8
Реализация презентера. Файл presenter.cpp
#include "presenter.h"
Presenter::Presenter()
:view(NULL), model(NULL){
}
Presenter::Presenter(IView *newView)
:view(newView), model(new Model){
QObject *view_obj = dynamic_cast<QObject*>(view);
connect(view_obj, SIGNAL(onLogin()), this, SLOT(Login()));
connect(view_obj, SIGNAL(onListUpdate()), this, SLOT(UpdateUsers()));
}
void Presenter::UpdateUsers(){
view->UpdateUsers(model->GetUsers());
}
void Presenter::Login()
{
QString loginResult =
model->TryToLogin(view->GetUser(), view->GetPassword());
view->ShowMessage(loginResult);
}
http://www.slideshare.net/IgorShkulipa 9
Главное окно. Файл mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent), ui(new Ui::MainWindow){
ui->setupUi(this);
}
MainWindow::~MainWindow(){
delete ui;
}
QString MainWindow::GetUser(){
return ui->textEdit->toPlainText();
}
QString MainWindow::GetPassword(){
return ui->textEdit_2->toPlainText();
}
http://www.slideshare.net/IgorShkulipa 10
Главное окно. Файл mainwindow.cpp
void MainWindow::UpdateUsers(QList<QString> users){
ui->listWidget->clear();
QStringList stringList(users);
ui->listWidget->addItems(stringList);
}
void MainWindow::ShowMessage(QString message){
QMessageBox *mb=new QMessageBox();
mb->setText(message);
mb->show();
}
void MainWindow::on_pushButton_clicked(){
emit onLogin();
}
void MainWindow::on_listWidget_activated(const QModelIndex &index)
{
emit onListUpdate();
}
http://www.slideshare.net/IgorShkulipa 11
Главный файл. Файл main.cpp
#include "mainwindow.h"
#include <QApplication>
#include "presenter.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MainWindow* view=new MainWindow();
Presenter* present=new Presenter(view);
Q_UNUSED(present);
view->show();
return app.exec();
}
http://www.slideshare.net/IgorShkulipa 12
Результат
http://www.slideshare.net/IgorShkulipa 13
Лабораторная работа №4. Паттерн MVP на Qt
View
Presenter
Model

Mais conteúdo relacionado

Mais procurados

C++ STL & Qt. Занятие 06.
C++ STL & Qt. Занятие 06.C++ STL & Qt. Занятие 06.
C++ STL & Qt. Занятие 06.Igor Shkulipa
 
C++ STL & Qt. Занятие 09.
C++ STL & Qt. Занятие 09.C++ STL & Qt. Занятие 09.
C++ STL & Qt. Занятие 09.Igor Shkulipa
 
Java Core. Lecture# 5. Concurrency.
Java Core. Lecture# 5. Concurrency.Java Core. Lecture# 5. Concurrency.
Java Core. Lecture# 5. Concurrency.Anton Moiseenko
 
Java осень 2014 занятие 3
Java осень 2014 занятие 3Java осень 2014 занятие 3
Java осень 2014 занятие 3Technopark
 
Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5Technopark
 
Java. Многопоточность.
Java. Многопоточность.Java. Многопоточность.
Java. Многопоточность.Unguryan Vitaliy
 
Java осень 2014 занятие 6
Java осень 2014 занятие 6Java осень 2014 занятие 6
Java осень 2014 занятие 6Technopark
 
Ввведение в java
Ввведение в javaВвведение в java
Ввведение в javaUnguryan Vitaliy
 
C# Desktop. Занятие 02.
C# Desktop. Занятие 02.C# Desktop. Занятие 02.
C# Desktop. Занятие 02.Igor Shkulipa
 
C# Desktop. Занятие 01.
C# Desktop. Занятие 01.C# Desktop. Занятие 01.
C# Desktop. Занятие 01.Igor Shkulipa
 
C++ весна 2014 лекция 5
C++ весна 2014 лекция 5C++ весна 2014 лекция 5
C++ весна 2014 лекция 5Technopark
 
Практика Lock-free. RealTime-сервер
Практика Lock-free. RealTime-серверПрактика Lock-free. RealTime-сервер
Практика Lock-free. RealTime-серверPlatonov Sergey
 
объектно ориентированная платформа для построения
объектно ориентированная платформа для построенияобъектно ориентированная платформа для построения
объектно ориентированная платформа для построенияGennady Zavyalov
 
Шаблоны разработки ПО. Часть 3. Шаблоны GoF
Шаблоны разработки ПО. Часть 3. Шаблоны GoFШаблоны разработки ПО. Часть 3. Шаблоны GoF
Шаблоны разработки ПО. Часть 3. Шаблоны GoFSergey Nemchinsky
 
C++ Базовый. Занятие 15.
C++ Базовый. Занятие 15.C++ Базовый. Занятие 15.
C++ Базовый. Занятие 15.Igor Shkulipa
 
8. java lecture threads
8. java lecture threads8. java lecture threads
8. java lecture threadsMERA_school
 
C# Desktop. Занятие 04.
C# Desktop. Занятие 04.C# Desktop. Занятие 04.
C# Desktop. Занятие 04.Igor Shkulipa
 
Введение в язык программирования «Java»
Введение в язык программирования «Java»Введение в язык программирования «Java»
Введение в язык программирования «Java»Unguryan Vitaliy
 
C++ Базовый. Занятие 11.
C++ Базовый. Занятие 11.C++ Базовый. Занятие 11.
C++ Базовый. Занятие 11.Igor Shkulipa
 

Mais procurados (20)

C++ STL & Qt. Занятие 06.
C++ STL & Qt. Занятие 06.C++ STL & Qt. Занятие 06.
C++ STL & Qt. Занятие 06.
 
C++ STL & Qt. Занятие 09.
C++ STL & Qt. Занятие 09.C++ STL & Qt. Занятие 09.
C++ STL & Qt. Занятие 09.
 
Java Core. Lecture# 5. Concurrency.
Java Core. Lecture# 5. Concurrency.Java Core. Lecture# 5. Concurrency.
Java Core. Lecture# 5. Concurrency.
 
Java осень 2014 занятие 3
Java осень 2014 занятие 3Java осень 2014 занятие 3
Java осень 2014 занятие 3
 
Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5
 
Java. Многопоточность.
Java. Многопоточность.Java. Многопоточность.
Java. Многопоточность.
 
Java осень 2014 занятие 6
Java осень 2014 занятие 6Java осень 2014 занятие 6
Java осень 2014 занятие 6
 
Ввведение в java
Ввведение в javaВвведение в java
Ввведение в java
 
Bytecode
BytecodeBytecode
Bytecode
 
C# Desktop. Занятие 02.
C# Desktop. Занятие 02.C# Desktop. Занятие 02.
C# Desktop. Занятие 02.
 
C# Desktop. Занятие 01.
C# Desktop. Занятие 01.C# Desktop. Занятие 01.
C# Desktop. Занятие 01.
 
C++ весна 2014 лекция 5
C++ весна 2014 лекция 5C++ весна 2014 лекция 5
C++ весна 2014 лекция 5
 
Практика Lock-free. RealTime-сервер
Практика Lock-free. RealTime-серверПрактика Lock-free. RealTime-сервер
Практика Lock-free. RealTime-сервер
 
объектно ориентированная платформа для построения
объектно ориентированная платформа для построенияобъектно ориентированная платформа для построения
объектно ориентированная платформа для построения
 
Шаблоны разработки ПО. Часть 3. Шаблоны GoF
Шаблоны разработки ПО. Часть 3. Шаблоны GoFШаблоны разработки ПО. Часть 3. Шаблоны GoF
Шаблоны разработки ПО. Часть 3. Шаблоны GoF
 
C++ Базовый. Занятие 15.
C++ Базовый. Занятие 15.C++ Базовый. Занятие 15.
C++ Базовый. Занятие 15.
 
8. java lecture threads
8. java lecture threads8. java lecture threads
8. java lecture threads
 
C# Desktop. Занятие 04.
C# Desktop. Занятие 04.C# Desktop. Занятие 04.
C# Desktop. Занятие 04.
 
Введение в язык программирования «Java»
Введение в язык программирования «Java»Введение в язык программирования «Java»
Введение в язык программирования «Java»
 
C++ Базовый. Занятие 11.
C++ Базовый. Занятие 11.C++ Базовый. Занятие 11.
C++ Базовый. Занятие 11.
 

Destaque

16 FACTS ABOUT CHOCOLATE
16 FACTS ABOUT CHOCOLATE16 FACTS ABOUT CHOCOLATE
16 FACTS ABOUT CHOCOLATENisha Thinisha
 
amazing animals
amazing animalsamazing animals
amazing animalssosome
 
Mid map gaya belajar
Mid map gaya belajarMid map gaya belajar
Mid map gaya belajarsanty1301
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.Igor Shkulipa
 
C# Web. Занятие 12.
C# Web. Занятие 12.C# Web. Занятие 12.
C# Web. Занятие 12.Igor Shkulipa
 
C# Desktop. Занятие 09.
C# Desktop. Занятие 09.C# Desktop. Занятие 09.
C# Desktop. Занятие 09.Igor Shkulipa
 
Capítulo iii correcion
Capítulo iii correcion Capítulo iii correcion
Capítulo iii correcion Ida Morán
 
Vijay bhosekar published article organic agriculture
Vijay bhosekar  published article  organic agricultureVijay bhosekar  published article  organic agriculture
Vijay bhosekar published article organic agriculturevijay bhosekar
 
Laura mulvey’s male gaze theory
Laura mulvey’s male gaze theoryLaura mulvey’s male gaze theory
Laura mulvey’s male gaze theoryLaila Jaleel
 
InPay SA Kongres Mobilny 2015
InPay SA Kongres Mobilny 2015InPay SA Kongres Mobilny 2015
InPay SA Kongres Mobilny 2015Lech Wilczynski
 
C# Web. Занятие 03.
C# Web. Занятие 03.C# Web. Занятие 03.
C# Web. Занятие 03.Igor Shkulipa
 

Destaque (18)

16 FACTS ABOUT CHOCOLATE
16 FACTS ABOUT CHOCOLATE16 FACTS ABOUT CHOCOLATE
16 FACTS ABOUT CHOCOLATE
 
amazing animals
amazing animalsamazing animals
amazing animals
 
Mid map gaya belajar
Mid map gaya belajarMid map gaya belajar
Mid map gaya belajar
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.
 
C# Web. Занятие 12.
C# Web. Занятие 12.C# Web. Занятие 12.
C# Web. Занятие 12.
 
C# Desktop. Занятие 09.
C# Desktop. Занятие 09.C# Desktop. Занятие 09.
C# Desktop. Занятие 09.
 
Capítulo iii correcion
Capítulo iii correcion Capítulo iii correcion
Capítulo iii correcion
 
Print Brochure 3NM v6
Print Brochure 3NM v6Print Brochure 3NM v6
Print Brochure 3NM v6
 
Vijay bhosekar published article organic agriculture
Vijay bhosekar  published article  organic agricultureVijay bhosekar  published article  organic agriculture
Vijay bhosekar published article organic agriculture
 
PRES Eve's Dream
PRES Eve's DreamPRES Eve's Dream
PRES Eve's Dream
 
Laura mulvey’s male gaze theory
Laura mulvey’s male gaze theoryLaura mulvey’s male gaze theory
Laura mulvey’s male gaze theory
 
InPay OpenReaktor
InPay OpenReaktorInPay OpenReaktor
InPay OpenReaktor
 
5 historia clinica
5  historia clinica 5  historia clinica
5 historia clinica
 
MME 2016
MME 2016MME 2016
MME 2016
 
InPay SA Kongres Mobilny 2015
InPay SA Kongres Mobilny 2015InPay SA Kongres Mobilny 2015
InPay SA Kongres Mobilny 2015
 
Km1
Km1Km1
Km1
 
C# Web. Занятие 03.
C# Web. Занятие 03.C# Web. Занятие 03.
C# Web. Занятие 03.
 
5 niveles de prevension
5  niveles de prevension5  niveles de prevension
5 niveles de prevension
 

Semelhante a C++ STL & Qt. Занятие 04.

C++ осень 2012 лекция 1
C++ осень 2012 лекция 1C++ осень 2012 лекция 1
C++ осень 2012 лекция 1Technopark
 
Froglogic Squish
Froglogic Squish Froglogic Squish
Froglogic Squish SQALab
 
Шаблоны разработки ПО. Часть 1. Введние
Шаблоны разработки ПО. Часть 1. ВведниеШаблоны разработки ПО. Часть 1. Введние
Шаблоны разработки ПО. Часть 1. ВведниеSergey Nemchinsky
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.Igor Shkulipa
 
Behat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и MinkBehat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и Minktyomo4ka
 
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворковНикита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворковSergey Platonov
 
Курсы по мобильной разработке. 1 лекция. Знакомство с iOS
Курсы по мобильной разработке. 1 лекция. Знакомство с iOSКурсы по мобильной разработке. 1 лекция. Знакомство с iOS
Курсы по мобильной разработке. 1 лекция. Знакомство с iOSГлеб Тарасов
 
Ember.js ответ на почти все вопросы - java script frameworks day 2014
Ember.js   ответ на почти все вопросы - java script frameworks day 2014Ember.js   ответ на почти все вопросы - java script frameworks day 2014
Ember.js ответ на почти все вопросы - java script frameworks day 2014Andrey Listochkin
 
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемыMoscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемыOleg Nenashev
 
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид ШирмановКомпонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид ШирмановMoscowJS
 
Инструмент для разработки эл. курсов Course lab. WebSoft
Инструмент для разработки эл. курсов Course lab. WebSoftИнструмент для разработки эл. курсов Course lab. WebSoft
Инструмент для разработки эл. курсов Course lab. WebSoftСообщество eLearning PRO
 
Метапрограммирование с примерами на JavaScript
Метапрограммирование с примерами на JavaScriptМетапрограммирование с примерами на JavaScript
Метапрограммирование с примерами на JavaScriptTimur Shemsedinov
 
TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...
TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...
TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...Ontico
 
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Dev_Party
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорьdrupalconf
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов ИгорьPVasili
 

Semelhante a C++ STL & Qt. Занятие 04. (20)

C++ осень 2012 лекция 1
C++ осень 2012 лекция 1C++ осень 2012 лекция 1
C++ осень 2012 лекция 1
 
Tdd php
Tdd phpTdd php
Tdd php
 
Froglogic Squish
Froglogic Squish Froglogic Squish
Froglogic Squish
 
Шаблоны разработки ПО. Часть 1. Введние
Шаблоны разработки ПО. Часть 1. ВведниеШаблоны разработки ПО. Часть 1. Введние
Шаблоны разработки ПО. Часть 1. Введние
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.
 
Behat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и MinkBehat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и Mink
 
Java 2 - Java Intro
Java 2 - Java IntroJava 2 - Java Intro
Java 2 - Java Intro
 
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворковНикита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
 
Курсы по мобильной разработке. 1 лекция. Знакомство с iOS
Курсы по мобильной разработке. 1 лекция. Знакомство с iOSКурсы по мобильной разработке. 1 лекция. Знакомство с iOS
Курсы по мобильной разработке. 1 лекция. Знакомство с iOS
 
Ember.js ответ на почти все вопросы - java script frameworks day 2014
Ember.js   ответ на почти все вопросы - java script frameworks day 2014Ember.js   ответ на почти все вопросы - java script frameworks day 2014
Ember.js ответ на почти все вопросы - java script frameworks day 2014
 
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемыMoscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
 
Squeek 1
Squeek 1Squeek 1
Squeek 1
 
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид ШирмановКомпонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
 
Инструмент для разработки эл. курсов Course lab. WebSoft
Инструмент для разработки эл. курсов Course lab. WebSoftИнструмент для разработки эл. курсов Course lab. WebSoft
Инструмент для разработки эл. курсов Course lab. WebSoft
 
Java 1 - Java Fund
Java 1 - Java FundJava 1 - Java Fund
Java 1 - Java Fund
 
Метапрограммирование с примерами на JavaScript
Метапрограммирование с примерами на JavaScriptМетапрограммирование с примерами на JavaScript
Метапрограммирование с примерами на JavaScript
 
TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...
TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...
TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...
 
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорь
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов Игорь
 

Mais de Igor Shkulipa

Общие темы. Тема 03.
Общие темы. Тема 03. Общие темы. Тема 03.
Общие темы. Тема 03. Igor Shkulipa
 
Общие темы. Тема 01.
Общие темы. Тема 01.Общие темы. Тема 01.
Общие темы. Тема 01.Igor Shkulipa
 
JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.Igor Shkulipa
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.Igor Shkulipa
 
JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.Igor Shkulipa
 
JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.Igor Shkulipa
 
JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.Igor Shkulipa
 
JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.Igor Shkulipa
 
JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.Igor Shkulipa
 
JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.Igor Shkulipa
 
JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.Igor Shkulipa
 
JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.Igor Shkulipa
 
JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.Igor Shkulipa
 
C# Web. Занятие 09.
C# Web. Занятие 09.C# Web. Занятие 09.
C# Web. Занятие 09.Igor Shkulipa
 
C# Web. Занятие 08.
C# Web. Занятие 08.C# Web. Занятие 08.
C# Web. Занятие 08.Igor Shkulipa
 
C# Web. Занятие 07.
C# Web. Занятие 07.C# Web. Занятие 07.
C# Web. Занятие 07.Igor Shkulipa
 
C# Web. Занятие 04.
C# Web. Занятие 04.C# Web. Занятие 04.
C# Web. Занятие 04.Igor Shkulipa
 
C# Web. Занятие 14.
C# Web. Занятие 14.C# Web. Занятие 14.
C# Web. Занятие 14.Igor Shkulipa
 
C# Web. Занятие 15.
C# Web. Занятие 15.C# Web. Занятие 15.
C# Web. Занятие 15.Igor Shkulipa
 
C# Web. Занятие 13.
C# Web. Занятие 13.C# Web. Занятие 13.
C# Web. Занятие 13.Igor Shkulipa
 

Mais de Igor Shkulipa (20)

Общие темы. Тема 03.
Общие темы. Тема 03. Общие темы. Тема 03.
Общие темы. Тема 03.
 
Общие темы. Тема 01.
Общие темы. Тема 01.Общие темы. Тема 01.
Общие темы. Тема 01.
 
JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.
 
JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.
 
JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.
 
JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.
 
JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.
 
JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.
 
JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.
 
JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.
 
JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.
 
JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.
 
C# Web. Занятие 09.
C# Web. Занятие 09.C# Web. Занятие 09.
C# Web. Занятие 09.
 
C# Web. Занятие 08.
C# Web. Занятие 08.C# Web. Занятие 08.
C# Web. Занятие 08.
 
C# Web. Занятие 07.
C# Web. Занятие 07.C# Web. Занятие 07.
C# Web. Занятие 07.
 
C# Web. Занятие 04.
C# Web. Занятие 04.C# Web. Занятие 04.
C# Web. Занятие 04.
 
C# Web. Занятие 14.
C# Web. Занятие 14.C# Web. Занятие 14.
C# Web. Занятие 14.
 
C# Web. Занятие 15.
C# Web. Занятие 15.C# Web. Занятие 15.
C# Web. Занятие 15.
 
C# Web. Занятие 13.
C# Web. Занятие 13.C# Web. Занятие 13.
C# Web. Занятие 13.
 

C++ STL & Qt. Занятие 04.

  • 1. Темы лекции: Паттерн MVP на Qt. Практическое задание: Паттерн MVP на Qt. Тренер: Игорь Шкулипа, к.т.н. С++ Библиотеки STL и Qt. Занятие 4
  • 3. http://www.slideshare.net/IgorShkulipa 3 Класс «Модель». Файл model.h #ifndef MODEL_H #define MODEL_H #include <QObject> #include <QMap> #include <QString> class Model: public QObject { Q_OBJECT private: QMap<QString,QString> usersAndPasswords; public: Model(); QList<QString> GetUsers(); QString TryToLogin(QString user, QString password); }; #endif // MODEL_H
  • 4. http://www.slideshare.net/IgorShkulipa 4 Класс «Презентер». Файл presenter.h #ifndef PRESENTER_H #define PRESENTER_H #include <QObject> #include "iview.h" #include "model.h" class Presenter: public QObject { Q_OBJECT private: IView* view; Model* model; public: Presenter(); Presenter(IView* newView); private slots: void UpdateUsers(); void Login(); }; #endif // PRESENTER_H
  • 5. http://www.slideshare.net/IgorShkulipa 5 Интерфейс «Вид». Файл iview.h #ifndef IVIEW_H #define IVIEW_H #include <QString> #include <QList> class IView { public: virtual QString GetUser()=0; virtual QString GetPassword()=0; virtual void UpdateUsers(QList<QString> users)=0; virtual void ShowMessage(QString message)=0; public: virtual void onLogin()=0; virtual void onListUpdate()=0; }; #endif // IVIEW_H
  • 6. http://www.slideshare.net/IgorShkulipa 6 Реализация интерфейса. Файл mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include "iview.h" namespace Ui { class MainWindow;} class MainWindow : public QMainWindow, public Iview { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); virtual QString GetUser(); virtual QString GetPassword(); virtual void UpdateUsers(QList<QString> users); virtual void ShowMessage(QString message); signals: void onLogin(); void onListUpdate(); private slots: void on_pushButton_clicked(); void on_listWidget_activated(const QModelIndex &index); private: Ui::MainWindow *ui; }; #endif // MAINWINDOW_H
  • 7. http://www.slideshare.net/IgorShkulipa 7 Реализация модели. Файл model.cpp #include "model.h" Model::Model() { usersAndPasswords.insert("User1", "Password1"); usersAndPasswords.insert("User2", "Password2"); usersAndPasswords.insert("User3", "Password3"); usersAndPasswords.insert("User4", "Password4"); usersAndPasswords.insert("User5", "Password5"); } QList<QString> Model::GetUsers(){ return usersAndPasswords.keys(); } QString Model::TryToLogin(QString user, QString password){ if (usersAndPasswords.contains(user)) { int index=usersAndPasswords.keys().indexOf(user); if (usersAndPasswords.values().at(index) == password) { return "Login Successful!"; } } return "Login Failed."; }
  • 8. http://www.slideshare.net/IgorShkulipa 8 Реализация презентера. Файл presenter.cpp #include "presenter.h" Presenter::Presenter() :view(NULL), model(NULL){ } Presenter::Presenter(IView *newView) :view(newView), model(new Model){ QObject *view_obj = dynamic_cast<QObject*>(view); connect(view_obj, SIGNAL(onLogin()), this, SLOT(Login())); connect(view_obj, SIGNAL(onListUpdate()), this, SLOT(UpdateUsers())); } void Presenter::UpdateUsers(){ view->UpdateUsers(model->GetUsers()); } void Presenter::Login() { QString loginResult = model->TryToLogin(view->GetUser(), view->GetPassword()); view->ShowMessage(loginResult); }
  • 9. http://www.slideshare.net/IgorShkulipa 9 Главное окно. Файл mainwindow.cpp #include "mainwindow.h" #include "ui_mainwindow.h" #include <QMessageBox> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); } MainWindow::~MainWindow(){ delete ui; } QString MainWindow::GetUser(){ return ui->textEdit->toPlainText(); } QString MainWindow::GetPassword(){ return ui->textEdit_2->toPlainText(); }
  • 10. http://www.slideshare.net/IgorShkulipa 10 Главное окно. Файл mainwindow.cpp void MainWindow::UpdateUsers(QList<QString> users){ ui->listWidget->clear(); QStringList stringList(users); ui->listWidget->addItems(stringList); } void MainWindow::ShowMessage(QString message){ QMessageBox *mb=new QMessageBox(); mb->setText(message); mb->show(); } void MainWindow::on_pushButton_clicked(){ emit onLogin(); } void MainWindow::on_listWidget_activated(const QModelIndex &index) { emit onListUpdate(); }
  • 11. http://www.slideshare.net/IgorShkulipa 11 Главный файл. Файл main.cpp #include "mainwindow.h" #include <QApplication> #include "presenter.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); MainWindow* view=new MainWindow(); Presenter* present=new Presenter(view); Q_UNUSED(present); view->show(); return app.exec(); }
  • 13. http://www.slideshare.net/IgorShkulipa 13 Лабораторная работа №4. Паттерн MVP на Qt View Presenter Model