2011-09-02 4 views
0

QGLWidget 클래스의 멤버 인 timerEvent는 mousemove-function이 호출 될 때 트리거됩니다. 나는 이런 식으로 그것을 할 수 있다고 생각 :QGraphicsScene에서 QtimerEvent 사용

void OpenGLScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event) 
{ 
    int mousex = event->scenePos().x(); 
    int mousey = event->scenePos().y(); 

    if ((test->modus==2) && (test->move1 != -1)) 
    { 
     p_list[test->move1].x=mousex-(1220); 
     p_list[test->move1].y=mousey-(610); 
     test->refresh = !(test->refresh); 
     test->timerEvent(???); 
     update(); 
    } 
} 

를 어쨌든 나는 물음표가 어디에 투입해야할지 잘 모릅니다 :

void GLWidget::timerEvent(QTimerEvent *e) 
{ 
    if (e->timerId()==1 && refresh==true) 
    { 
     refresh = !refresh; 
     swapBuffers(); 
     update(); 
    } 
} 

그것은 다음과 같습니다. 나는 여러 가지 것을 시도했다. 그것은 작동하지 않습니다. timerId() = 1로 설정하고 싶습니다. 당신의 도움에 대한 감사합니다 ...

+0

이유는 타이머 이벤트를 사용하려고 조금도? QObject의 타이머 이벤트 시스템은 일반적으로 시간 간격에 따라 주기적으로 코드를 실행하기위한 시스템입니다. 여기서 마우스를 움직일 때마다 코드를 실행하려고합니다. 또한 타이머 이벤트의 ID를 제어 할 수 없기 때문에 Qt가 타이머 이벤트의 ID를 관리합니다 ([QObject :: startTimer() 설명서] (http://doc.qt.nokia.com/4.7-snapshot/qobject 참조). html # startTimer)). – Chris

답변

0

왜 당신처럼 자신의 이벤트를 호출하지 않습니다

void OpenGLScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event) 
{ 
    // ... 
    if ((test->modus==2) && (test->move1 != -1)) 
    { 
     // ... 
     test->refresh = !(test->refresh); 

     //test->timerEvent(???); replaced by : 
     test->manuelUpdate(); // your own function 
     //... 
    } 
} 

하고 GLWidget에가 :

void GLWidget::manuelUpdate() 
{ 
    if (refresh==true) 
    { 
     refresh = !refresh; 
     swapBuffers(); 
     update(); 
    } 
} 
+0

답변 해 주셔서 감사합니다. 타이머 함수는 OpenGL의 유휴 함수와 동일합니다. 예, 마우스가 움직일 때마다 코드를 호출해야합니다. 내 마우스로 포인트를 잡아서 그 기능으로 움직이기 때문에. – buddy

+0

실제로 그 잘 작동합니다 ... 나는 단지 나의 좌표에 사소한 문제가있었습니다. 어쨌든 고맙습니다. – buddy