Ім'я файлу: LR2_СПЗ.docx
Розширення: docx
Розмір: 128кб.
Дата: 06.05.2021
скачати



Форма № Н-9.02

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

ХМЕЛЬНИЦЬКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ

Факультет програмування та комп’ютерних

і телекомунікаційних систем

Кафедра комп’ютерної інженерії та системного програмування

Лабораторна робота №2

з дисципліни «Системне програмне забезпечення»

на тему:

«ВИКОРИСТАННЯ ГРАФІКИ QT ДЛЯ

ВІЗУАЛІЗАЦІЇ РОБОТИ СКРИПТІВ»

ЛРКІ.170145.17.01.17 ПЗ

Виконала:

студент 3 курсу, групи КІ- 17-1 ________________ Музичук О.Р.

(Підпис)

Перевірив: ___________________ Бобровнікова К.Ю.

(Підпис)

Хмельницький - 2020 рік

Мета: : : ознайомитись з середовищем розробки QT Creator, вивчити механізм сигналів і слотів, методи статичного та динамічного створення об'єктів, а також багатовіконних додатків.

Варіант 17 (рівень 1)

Завдання: На формі розмістити поле для введення рядка та поле для відображення масиву рядків (в режимі заборони редагування). Також

розмістити кнопки ―додати‖, ―видалити‖ та ―вихід‖. При натисненні

кнопки ―додати‖ текст із першого компонента додається в другий компонент. При натисненні кнопки ―видалити‖ видаляється перший рядок

у другому компоненті. При натисненні кнопки ―вихід‖ відбувається

завершення роботи програми.
Код програми:

//Вміст файлу mainwindow.cpp

#include "mainwindow.h"

#include "ui_mainwindow.h"

#include

MainWindow::MainWindow(QWidget *parent) :

QMainWindow(parent),

ui(new Ui::MainWindow)

{

ui->setupUi(this);

QTimer *timer = new QTimer;

cpuPersent = new QLabel(this);

cpuPersent->setGeometry(QRect(QPoint(40, 230),QSize(50,20)));

cpuPersent->setText("CPU");

cpuPersent->setStyleSheet("QLabel { color : blue; }");

cpu = new QLabel(this);

cpu->setGeometry(QRect(QPoint(80, 230),QSize(50, 20)));

memoryPersent = new QLabel(this);

memoryPersent->setGeometry(QRect(QPoint(130, 230),QSize(50,20)));

memoryPersent->setText("Memory");

memoryPersent->setStyleSheet("QLabel { color : red; }");

memory = new QLabel(this);

memory->setGeometry(QRect(QPoint(200, 230),QSize(50, 20)));

memoryTotal = new QLabel(this);

memoryTotal->setGeometry(QRect(QPoint(100, 260),QSize(150,20)));

memoryTotalTitle = new QLabel(this);

memoryTotalTitle->setGeometry(QRect(QPoint(5,260),QSize(150, 20)));

memoryTotalTitle->setText("Total Memory:");

memoryUsed = new QLabel(this);

memoryUsed->setGeometry(QRect(QPoint(100, 290),QSize(150,20)));

memoryUsedTitle = new QLabel(this);

memoryUsedTitle->setGeometry(QRect(QPoint(5,290),QSize(150, 20)));

memoryUsedTitle->setText("Memory used:");

customPlot = new QCustomPlot(); // Ініціалізація графічного полотна

ui->gridLayout->addWidget(customPlot,0,0,1,1);//додавання

графічного полотна на gridLayout

customPlot->addGraph(); //перший графік – завантаження процесора

customPlot->graph(0)->setPen(QPen(QColor(40, 110, 255)));

// встановлення кольору для першого графіка – синій

customPlot->addGraph();//другий графік – завантаження

пам’яті

customPlot->graph(1)->setPen(QPen(QColor(255, 110, 40)));

// встановлення кольору для другого графіка – червоний

//налаштування вісей

QSharedPointer timeTicker(new

QCPAxisTickerTime);

timeTicker->setTimeFormat("%m:%s");//формат часу

customPlot->xAxis->setTicker(timeTicker);//додавання по вісі абсцис часу

customPlot->axisRect()->setupFullAxesBox();

customPlot->yAxis->setRange(0, 100);//встановлення меж для

вісі ординат

// задання можливості вибору графіку мишею та масштабування

(шляхом прокрутки колеса миші)

customPlot->setInteractions(QCP::iRangeDrag |

QCP::iRangeZoom | QCP::iSelectPlottables);

// з’єднання сигналу таймера timeout() з слотом

MainWindow::realtimeDataSlot:

connect(timer, SIGNAL(timeout()), this,

SLOT(realtimeDataSlot()));

timer->start(0); //Запуск таймера з встановленим інтервалом– 0

}

QString MainWindow::mesure(int n)

{

QString e;

int gb = (n / 1024) / 1024;

int mb = (n-gb*1024*1024) /1024;

int kb = (n - (gb*1024*1024+mb*1024));

if (gb > 0)

e = QString::number(gb) + QString(" Gb ");

else

e = QString("");

if (mb > 0)

e += QString::number(mb) + QString(" Mb ");

if (kb > 0)

e += QString::number(kb) + QString(" Kb ");

return e;

}

int MainWindow::getMemoryLoad(QString &MemoryPresent, QString

&MemoryUsed)

{

//зчитування даних

string mem;

ifstream mem_file("/proc/meminfo");

mem_file >> mem; mem_file >> mem;

//визначення доступної пам’яті

int num = atoi(mem.c_str());

int percent = num / 100;

MemoryPresent=mesure(num);

//визначення зайнятої пам’яті.

int free = 0;

for (int i = 0 ; i < 3 ; i++) {

mem_file >> mem; mem_file >> mem; mem_file >> mem;

free += atoi(mem.c_str());

}

num -= free;

MemoryUsed=mesure(num);

percent = num / percent;

return percent;

}

void MainWindow::realtimeDataSlot()

{

static QTime time(QTime::currentTime());

// визначенню двох нових точок для вибірки даних

double key = time.elapsed()/1000.0; // час, що пройшов

з моменту запуску – перша точка

static double lastPointKey = 0; //друга точка

if (key - lastPointKey > 0.002) // оновлення кожні 2 мс

{

// виведення даних

int cpu_persent=getCpuLoad(1);

customPlot->graph(0)->addData(key,cpu_persent);

cpu->setText(QString::number(cpu_persent)+'%');

lastPointKey = key;

QString total,used;

int memory_persent=getMemoryLoad(total,used);

customPlot->graph(1)->addData(key, memory_persent);

memory->setText(QString::number(memory_persent)+'%');

memoryTotal->setText(total);

memoryUsed->setText(used);

k++;

}

if (k >4)//прокрутка графіку буде відбуватись після 4секунд.

customPlot->xAxis->setRange(key, 4, Qt::AlignRight);

//зсув (прокрутка) графіку з константою 4

customPlot->replot();

}

int MainWindow::getCpuLoad(double dt)

{

vector stats1 = readCpuStats();

QProcess::execute("sleep",QStringList()<<

QString::number(dt));

vector stats2 = readCpuStats();

int size1 = stats1.size();

int size2 = stats2.size();

if (!size1 || !size2 || size1 != size2) return 2;

for (int i = 0; i < size1; ++i) stats2[i] -= stats1[i];

int sum = 1;

for (int i = 0; i < size1; ++i) sum += stats2[i];

int load = 100 - (stats2[size2 - 1] * 100 / sum);

return load;

}

vector MainWindow::readCpuStats()

{

vector ret;

ifstream stat_file("/proc/stat");

int val;

string tmp;

stat_file >> tmp;

for (int i = 0; i < 4; ++i)

{

stat_file >> val;

ret.push_back(val);

}

stat_file.close();

return ret;

}

MainWindow::

MainWindow()

{

delete ui;

}

Результат роботи програми:


Висновок: на даній лабораторній роботі я ознайомився з середовищем розробки QT Creator, вивчив механізм сигналів і слотів, методи статичного та динамічного створення об'єктів, а також багатові-конних додатків.
скачати

© Усі права захищені
написати до нас