Программа имеет считывать данные с консоли, используя класс QTextStream, и записывать их в линейный контейнер QStack до введения терминального 12.5±0.2 значение (оно не должно попасть в контейнер). Создать 2 класса, которые должны быть дочерними от QObject. Первый класс: имеет метод, который запускает таймер и сигнал с аргументом типа данных. второй класс имеет слот с аргументом типа данных. Связать сигнал объекта первого класса и слот объекта второго класса. В timerEvent () первого класса генерируется случайное целое число в диапазоне количества элементов в контейнере. найти в контейнере значение по этому индексу и вывести на экран, если значение соответствует специальному значению 1.3±0.8, сгенерировать сигнал с соответствующим аргументом. Слот второго класса должен вывести сообщение о завершении и завершить выполнение программы. Вот я сделал но оно не правильно работает, где что неправильно?
//MySignal.h
#ifndef SIGNALCLASS_H
#define SIGNALCLASS_H
#include <QObject>
#include <QStack>
#include <QDebug>
#include <qmath.h>
class MySignal : public QObject {
Q_OBJECT
public:
explicit MySignal(QStack<float> stack);
protected:
void timerEvent(QTimerEvent *event);
private:
QStack<float> s;
signals:
void printSignal(float ch);
public slots:
};
#endif // SIGNALCLASS_H
//MySlot.h
#ifndef SLOTCLASS_H
#define SLOTCLASS_H
#include <QObject>
#include <QDebug>
#include <QCoreApplication>
class MySlot : public QObject {
Q_OBJECT
public:
explicit MySlot(QObject *parent = 0);
signals:
public slots:
void print(float ch);
};
#endif // SLOTCLASS_H
//MySignal.cpp
#include "MySignal.h"
MySignal::MySignal(QStack<float> stack) {
s = stack;
}
void MySignal::timerEvent(QTimerEvent *event) {
int n = qrand() % s.count();
if (qFabs(1.3-s.at(n)) <= 0.8) emit printSignal(s.at(n));
else qDebug() << s.at(n);
}
//MySlot.cpp
#include "MySlot.h"
MySlot::MySlot(QObject *parent) : QObject(parent) {
}
void MySlot::print(float ch) {
qDebug() << "Number " << ch << " found. Closing application...";
QCoreApplication::exit();
}
//main.cpp
#include <QCoreApplication>
#include <QTextStream>
#include <QDebug>
#include <QStack>
#include <qmath.h>
#include <MySignal.h>
#include <MySlot.h>
int main(int argc, char *argv[]) {
QCoreApplication app(argc, argv);
float ch;
QTextStream in(stdin);
QStack<float> stack;
while (true) {
in >> ch;
if (qFabs(ch-12.5) <= 0.2) break;
stack.push_back(ch);
}
MySignal *signal = new MySignal(stack);
MySlot *slot = new MySlot();
signal->startTimer(100);
QObject::connect(signal, SIGNAL(printSignal(float)), slot, SLOT(print(float)));
return app.exec();
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Написал небольшую программу на visual studio 15 c++ с использованием GLEW GLFW GLM OpenCVПо требованиям человека, которому я это делаю, я должен отдать проект...