C++ (Qt)#include "widget.h"#include "ui_widget.h" //#include <QMessageBox>#include "math.h" Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget){ ui->setupUi(this); myTimer = new QTimer(); QObject::connect(ui->pushButton_1, SIGNAL(clicked()), this, SLOT(MyEventHandler1())); QObject::connect(ui->pushButton_2, SIGNAL(clicked()), this, SLOT(MyEventHandler1())); QObject::connect(ui->pushButton_3, SIGNAL(clicked()), this, SLOT(MyEventHandler1())); QObject::connect(ui->pushButton_4, SIGNAL(clicked()), this, SLOT(MyEventHandler1())); QObject::connect(ui->pushButton_5, SIGNAL(clicked()), this, SLOT(MyEventHandler2())); QObject::connect(myTimer, SIGNAL(timeout()), this, SLOT(MyEventTimer()));} Widget::~Widget(){ delete ui;} // рисование на формеvoid Widget::paintEvent(QPaintEvent *event){ QPoint p1, p2; QPainter P(this); // создаем кисть(черного цвета) QPen penB(Qt::black); // ширина кисти в пикселях penB.setWidth(1); // создаем кисть(красного цвета) QPen penR(Qt::red); // ширина кисти в пикселях penR.setWidth(2); int sy = height(); p1.setX(0); p1.setY(sy/2); p2.setX(width()); p2.setY(sy/2); // передаем нашему рисовальщику кисть черного цвета P.setPen(penB); // рисуем горизонтальную линию по координатам P.drawLine(p1,p2); // начало построения графика p2.setX(0); p2.setY(sy/2); P.setPen(penR); for(int i = 0; i < src.size(); i+=2) { p1 = p2; p2.setX(src[i]); p2.setY(sy/2 + src[i+1]); P.drawLine(p1,p2); //P.drawPoint(p2); }} // функция готовит данные для рисования функцийvoid Widget::make_func(int var){ #define PI 3.14159 float x, y; int Px, Py; int mas; int sx = width(); int sy = height(); src.clear(); for(Px = 0; Px < sx; Px+=3) { x = 3*Px*PI/sy; switch(var) { case 0: break; case 1: {y = sin(x); mas = 4; break;} case 2: {y = cos(x); mas = 4; break;} case 3: {y = tan(x); mas = 150; break;} case 4: {y = atan(x); mas = 5; break;} } Py = (sy-(y+1)*sy)/mas; src += Px; src += Py; } this->repaint();} // обработка нажатия кнопки 1-4void Widget::MyEventHandler1(){ myTimer->stop(); QString str = sender()->objectName(); make_func(str.remove(0, 11).toInt()); } // обработка нажатия кнопки abracadabravoid Widget::MyEventHandler2(){ static int fl = 0; if (!fl) {myTimer->start(700); fl = 1;} else {myTimer->stop(); fl = 0;}} // обработка сигналов таймераvoid Widget::MyEventTimer(){ static int num = 1; src.clear(); for(int i = 0; i < width()/8; i++) { src += i*8; src += height()/5 - (i*num)%167; num+=2; } this->repaint();}
C++ (Qt)ui->pushButton_1