Russian Qt Forum

Qt => Общие вопросы => Тема начата: papos от Ноябрь 14, 2010, 13:32



Название: Работа с таймером
Отправлено: papos от Ноябрь 14, 2010, 13:32
Добрый день. Необходимо сделать так, чтобы после срабатывания таймера через каждую секунду выполнялось некое действие. У меня есть свой класс, наследуемый от QGLWidget. Почему-то таймер не срабаывает. Подскажите пожалуйста, почему:

Код:
#ifndef MYGLWIDGET_H
#define MYGLWIDGET_H

#include <QGLWidget>
#include <QTimer>

class MyGLWidget : public QGLWidget
{
    Q_OBJECT
public:
    MyGLWidget();

private:
 GLfloat iVertex[2][2]; //вектор координат луча
    double alpha; //угол поворота луча радара
    int intR; //радиус луча радара
 QTimer turnTimer; //таймер для поворота луча радара

protected:
   virtual void paintGL();
   virtual void initializeGL();
   virtual void resizeGL(int nWidth,int nHeight);
   virtual void keyPressEvent(QKeyEvent* e);
   void UpdateImage();

};

#endif // MYGLWIDGET_H

#include "myglwidget.h"
#include <QKeyEvent>
#include <math.h>
#include <QMessageBox>
#include <QString>


MyGLWidget::MyGLWidget()
{
    alpha=90;
    intR=50;
    connect(&turnTimer, SIGNAL(timeout()), this, SLOT(updateImage()));
    turnTimer.start(100);
}

void MyGLWidget::paintGL()
{
      glClear(GL_COLOR_BUFFER_BIT);

      glLineWidth(2.0);
      glColor3f(1.0,0,0);

      glBegin(GL_LINES);

          glVertex2fv(iVertex[0]);
          glVertex2fv(iVertex[1]);

      glEnd();
}

void MyGLWidget::initializeGL()
{
    qglClearColor(Qt::black);

    iVertex[0][0]=50;
    iVertex[0][1]=50;
    iVertex[1][0]=50;
    iVertex[1][1]=100;
}

void MyGLWidget::resizeGL(int nWidth,int nHeight)
{
    glViewport(0,0,(GLint)nWidth,(GLint)nHeight);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0,100,0,100,0,100);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

}

void MyGLWidget::UpdateImage()
{
    QMessageBox::information(this, "OK","OK", QMessageBox::Yes);
    alpha+=90;
    iVertex[1][0]=intR*cos(alpha*3.14/180)+50;
    iVertex[1][1]=intR*sin(alpha*3.14/180)+50;
    updateGL();
}


Название: Re: Работа с таймером
Отправлено: papos от Ноябрь 15, 2010, 15:37
up! help me plz  ???


Название: Re: Работа с таймером
Отправлено: SimpleSunny от Ноябрь 15, 2010, 15:42
Во первых void UpdateImage(); не слот
protected slots:
void UpdateImage();

Во вторых в конекте неправильно указано имя
connect(&turnTimer, SIGNAL(timeout()), this, SLOT(UpdateImage()));