Add Lesson 5 Task 1

This commit is contained in:
Stanislav Mykhailenko 2024-07-20 14:48:29 +03:00
parent 3fcab8541d
commit 70cc836f05
GPG key ID: 1E95E66A9C9D6A36
10 changed files with 434 additions and 0 deletions

74
Lesson_5/Task_1/.gitignore vendored Normal file
View file

@ -0,0 +1,74 @@
# This file is used to ignore files which are generated
# ----------------------------------------------------------------------------
*~
*.autosave
*.a
*.core
*.moc
*.o
*.obj
*.orig
*.rej
*.so
*.so.*
*_pch.h.cpp
*_resource.rc
*.qm
.#*
*.*#
core
!core/
tags
.DS_Store
.directory
*.debug
Makefile*
*.prl
*.app
moc_*.cpp
ui_*.h
qrc_*.cpp
Thumbs.db
*.res
*.rc
/.qmake.cache
/.qmake.stash
# qtcreator generated files
*.pro.user*
CMakeLists.txt.user*
# xemacs temporary files
*.flc
# Vim temporary files
.*.swp
# Visual Studio generated files
*.ib_pdb_index
*.idb
*.ilk
*.pdb
*.sln
*.suo
*.vcproj
*vcproj.*.*.user
*.ncb
*.sdf
*.opensdf
*.vcxproj
*vcxproj.*
# MinGW generated files
*.Debug
*.Release
# Python byte code
*.pyc
# Binaries
# --------
*.dll
*.exe

View file

@ -0,0 +1,28 @@
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++17
# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
automobile.cpp \
childautomobile.cpp \
main.cpp \
autoservice.cpp
HEADERS += \
automobile.h \
autoservice.h \
childautomobile.h
FORMS += \
autoservice.ui
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

View file

@ -0,0 +1,5 @@
#include "automobile.h"
Automobile::Automobile(QObject *parent)
: QObject{parent}
{}

View file

@ -0,0 +1,27 @@
#ifndef AUTOMOBILE_H
#define AUTOMOBILE_H
#include <QObject>
class Automobile : public QObject
{
Q_OBJECT
public:
explicit Automobile(QObject *parent = nullptr);
QString getManufacturer() { return m_manufacturer; }
void setManufacturer(QString manufacturer) { m_manufacturer = manufacturer; }
float getPrice() { return m_price; }
void setPrice(int price) { m_price = price; }
QString getType() { return m_type; }
void setType(QString type) { m_type = type; }
signals:
protected:
float m_price;
QString m_type;
private:
QString m_manufacturer;
};
#endif // AUTOMOBILE_H

View file

@ -0,0 +1,81 @@
#include "autoservice.h"
#include "ui_autoservice.h"
#include <QDebug>
AutoService::AutoService(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::AutoService)
{
ui->setupUi(this);
connect(ui->b_filter, &QPushButton::clicked, this, &AutoService::filter);
connect(ui->l_automobiles, &QListWidget::itemClicked, this, &AutoService::select);
ChildAutomobile* automobile1 = new ChildAutomobile();
ChildAutomobile* automobile2 = new ChildAutomobile();
ChildAutomobile* automobile3 = new ChildAutomobile();
automobile1->setManufacturer("Rolls-Royce");
automobile1->setModel((QString)"Wraith");
automobile1->setType("Coupé");
automobile1->setPrice(343350);
automobile1->setSeats(4);
automobile1->setColor(QColor(19, 25, 98));
automobile2->setManufacturer("Hyundai");
automobile2->setModel((QString)"Santa Cruz");
automobile2->setType("Pickup truck");
automobile2->setPrice(26900);
automobile2->setSeats(5);
automobile2->setColor(QColor(143, 144, 139));
automobile3->setManufacturer("JAC");
automobile3->setModel((QString)"Shuailing T6");
automobile3->setType("Pickup truck");
automobile3->setPrice(13778);
automobile3->setSeats(5);
automobile3->setColor(QColor(221, 225, 228));
m_automobiles.append(automobile1);
m_automobiles.append(automobile2);
m_automobiles.append(automobile3);
}
AutoService::~AutoService()
{
delete ui;
}
void AutoService::filter()
{
ui->l_automobiles->clear();
ui->e_selected->clear();
for (int automobile = 0; automobile < m_automobiles.size(); ++automobile) {
if (
((ui->e_manufacturer->text().isEmpty()) || m_automobiles[automobile]->getManufacturer() == ui->e_manufacturer->text())
&& ((ui->e_type->text().isEmpty()) || (m_automobiles[automobile]->getType() == ui->e_type->text()))
&& ((ui->e_price->text().isEmpty()) || (m_automobiles[automobile]->getPrice() >= ui->e_price->text().toInt()))
)
addAutomobile(m_automobiles[automobile]);
}
}
void AutoService::addAutomobile(ChildAutomobile * automobile)
{
ui->l_automobiles->addItem(automobile->getManufacturer() + " " + automobile->getModel());
}
void AutoService::select(QListWidgetItem * item)
{
for (int automobile = 0; automobile < m_automobiles.size(); ++automobile) {
if (item->text() == (m_automobiles[automobile]->getManufacturer() + " " + m_automobiles[automobile]->getModel())) {
ui->e_selected->setText("Manufacturer: " + m_automobiles[automobile]->getManufacturer() + "\n"
+ "Model: " + m_automobiles[automobile]->getModel() + "\n"
+ "Type: " + m_automobiles[automobile]->getType() + "\n"
+ "Seats: " + QString::number(m_automobiles[automobile]->getSeats()) + "\n"
+ "Color: " + m_automobiles[automobile]->getColor().name() + "\n"
+ "Price: " + QString::number(m_automobiles[automobile]->getPrice()));
break;
}
}
}

View file

@ -0,0 +1,31 @@
#ifndef AUTOSERVICE_H
#define AUTOSERVICE_H
#include <QMainWindow>
#include "childautomobile.h"
#include <QListWidget>
QT_BEGIN_NAMESPACE
namespace Ui {
class AutoService;
}
QT_END_NAMESPACE
class AutoService : public QMainWindow
{
Q_OBJECT
public:
AutoService(QWidget *parent = nullptr);
~AutoService();
private slots:
void filter();
private:
Ui::AutoService *ui;
QVector<ChildAutomobile *> m_automobiles;
void addAutomobile(ChildAutomobile*);
void select(QListWidgetItem *);
};
#endif // AUTOSERVICE_H

View file

@ -0,0 +1,143 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>AutoService</class>
<widget class="QMainWindow" name="AutoService">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>600</height>
</rect>
</property>
<property name="windowTitle">
<string>AutoService</string>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>Filter:</string>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
<number>19</number>
</property>
<item>
<widget class="QLabel" name="label_3">
<property name="text">
<string>Manufacturer</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="e_manufacturer">
<property name="clearButtonEnabled">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="spacing">
<number>76</number>
</property>
<item>
<widget class="QLabel" name="label_4">
<property name="text">
<string>Type</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="e_type"/>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<property name="spacing">
<number>43</number>
</property>
<item>
<widget class="QLabel" name="label_5">
<property name="text">
<string>Max price</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="e_price"/>
</item>
</layout>
</item>
</layout>
</item>
<item>
<widget class="QPushButton" name="b_filter">
<property name="text">
<string>Filter</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Automobile list:</string>
</property>
</widget>
</item>
<item>
<widget class="QListWidget" name="l_automobiles"/>
</item>
</layout>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QLabel" name="label_6">
<property name="text">
<string>Selected automobile:</string>
</property>
</widget>
</item>
<item>
<widget class="QTextEdit" name="e_selected">
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>25</height>
</rect>
</property>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<resources/>
<connections/>
</ui>

View file

@ -0,0 +1,5 @@
#include "childautomobile.h"
ChildAutomobile::ChildAutomobile(QObject *parent)
: Automobile{parent}
{}

View file

@ -0,0 +1,29 @@
#ifndef CHILDAUTOMOBILE_H
#define CHILDAUTOMOBILE_H
#include <QObject>
#include <QColor>
#include <automobile.h>
class ChildAutomobile : public Automobile
{
Q_OBJECT
public:
explicit ChildAutomobile(QObject *parent = nullptr);
QString getModel() { return m_model; }
void setModel(QString model) { m_model = model; }
int getSeats() { return m_seats; }
void setSeats(int seats) { m_seats = seats; }
QColor getColor() { return m_color; }
void setColor(QColor color) { m_color = color; }
void setModel(const char *);
signals:
private:
QString m_model;
int m_seats;
QColor m_color;
};
#endif // CHILDAUTOMOBILE_H

11
Lesson_5/Task_1/main.cpp Normal file
View file

@ -0,0 +1,11 @@
#include "autoservice.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
AutoService w;
w.show();
return a.exec();
}