QT--繪製正弦波與餘弦波切換視圖

#ifndef WIDGET_H
#define WIDGET_H

#include <QtGui/QWidget>
#include <QTimer>
#include <QPushButton>

class Widget : public QWidget
{
    Q_OBJECT
private:
    QTimer *t1;
    int count;
    QPushButton *btn_sin;
    QPushButton *btn_cos;
public slots:
    void handleTimeoue();
protected:
    void paintEvent(QPaintEvent *);
public:
    Widget(QWidget *parent = 0);
    ~Widget();


};

#endif // WIDGET_H
#include "Widget.h"
#include <QPainter>
#include <QPointF>
#include <QPen>
#include <qmath.h>
#include <QTimer>
#include <QDebug>
#include <QPushButton>
Widget::Widget(QWidget *parent)
    : QWidget(parent),count(0)
{
//    btn_sin = new QPushButton(this);
//    btn_sin->move(10,0);
//    btn_sin->setText("Sin");

    t1 = new QTimer(this);
    connect(t1,SIGNAL(timeout()),this,SLOT(handleTimeoue()));
    t1->start(1000);


}
void Widget::handleTimeoue()
{
    count++;
    count = count % 2;
    update();
    qDebug() << "Widget::handleTimeoue()"<<count;
}
void Widget::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    QPen pen;

    pen.setColor(Qt::green);
    pen.setStyle(Qt::SolidLine);
    pen.setWidthF(0.01);

    painter.setPen(pen);

    painter.setViewport(50, 50, width()-100, height()-100);
    painter.setWindow(-10, 2, 20, -4); // (-10, 2)    (10, -2)

    painter.fillRect(-10, 2, 20, -4, Qt::black);

    painter.drawLine(QPointF(-10, 0), QPointF(10, 0));   // x
    painter.drawLine(QPointF(0, 2), QPointF(0, -2));     // y
    if(count == 1)
    {
       for(float x=-10; x<10; x+=0.01)
       {
           float y = qSin(x);

           painter.drawPoint(QPointF(x, y));
       }
    }
    else if(count == 0 )
    {
        for(float x= -10; x<10; x+=0.01)
        {
            float y = qCos(x);
            painter.drawPoint(QPointF(x, y));
        }
    }
}

Widget::~Widget()
{
    
}
#include <QtGui/QApplication>
#include "Widget.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    
    return a.exec();
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章