-2

qt4 IDE で opengl の GUI を作成しています。opengl ウィンドウでウィジェットを作成したところ、[b]曲線[/b] を表示できるようになりました。ここで [b]paintGL()[/b] を使用し、この中で描画関数を呼び出して表示します。ピクセル座標を使用して、opengl ウィンドウをクリックすると、その特定のクリック位置で曲線を生成できます。しかし、プログラムを実行した後、初期描画関数と曲線が生成されることがわかりました。ウィンドウをクリックしても更新できませんでしたが、コンソールアプリケーションではすべての計算が実行され、表示のみが更新されません。

このウィンドウでマウスをクリックした後、どうすればopenglウィンドウを更新できますか?

ここに私のソースコードがあります:

GlWidget.cpp

//////Mouse Click Event for finding the pixel values//////
void GLWidget::mousePressEvent(QMouseEvent *event)
{

  float window_width,window_height;
  float ratio_x,ratio_y,cy;  
  click_x=event->x();
  click_y=event->y();
  //  qDebug()<<"screen cx1==="<<cx1;
  // qDebug()<<"screen cy1==="<<cy1;

  window_width = 800;
  window_height = 600;

  ratio_x=30.0/window_width;
  ratio_y=30.0/window_height;
  cy=window_height-click_y;
  click_x=click_x*ratio_x-10;
  click_y=cy*ratio_y-10;

  qDebug()<<"original_position_on_screen x==="<<click_x;
  qDebug()<<"original_position_on_screen y==="<<click_y;

  count=count+1;
  qDebug()<<"count==="<<count;
  func();                                             
}

void GLWidget::func()
{
    Draw_Curve();       //Drawing function
}

void GLWidget::Draw_Curve()
{
//Draw The Curve
}



void GLWidget:: paintGL()  // paintGL() function
{
  glClear(GL_COLOR_BUFFER_BIT);
  Draw_Axes();  //Draw 3d coordinate axes           

  func();       //in this function we get the pixel coordinates everytime the    mouse is clicked   in the window
 }
4

1 に答える 1

0

いくつかあります:

  • 関数を呼び出してマウス イベント ハンドラーから何かをレンダリングする代わりに、更新を要求する必要があります。

    void GLWidget::mousePressEvent(QMouseEvent *event)
    {
      float window_width,window_height;
      float ratio_x,ratio_y,cy;  
      click_x=event->x();
      click_y=event->y();
      //  qDebug()<<"screen cx1==="<<cx1;
      // qDebug()<<"screen cy1==="<<cy1;
    
      window_width = 800;
      window_height = 600;
    
      ratio_x=30.0/window_width;
      ratio_y=30.0/window_height;
      cy=window_height-click_y;
      click_x=click_x*ratio_x-10;
      click_y=cy*ratio_y-10;
    
      qDebug()<<"original_position_on_screen x==="<<click_x;
      qDebug()<<"original_position_on_screen y==="<<click_y;
    
      count=count+1;
      qDebug()<<"count==="<<count;
    
      update();  // to request image update
    }
    
  • paintGL() メソッドがすべてのレンダリングを行います。したがって、表示したいものは何でもここに入れます。

于 2012-07-13T10:37:50.750 に答える