• 4989阅读
  • 1回复

opengl响应鼠标问题 [复制链接]

上一主题 下一主题
离线gch0214
 
只看楼主 倒序阅读 楼主  发表于: 2012-05-21
关键词: QT4

我在ui中添加了一个verticallayout(600px*600px),
在代码中添加了如下内容,将我自己写的一个widget嵌入了进去

MainWindow::MainWindow(QWidget *parent) :  QMainWindow(parent),  ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    w = new RenjuWidget();
    QRect r(0,0,600,600);
    ui->verticalLayout->setGeometry(r);
    ui->verticalLayout->addWidget(w);
    this->move(0,0);
}


这个widget继承自qglwidget,其中有以下内容



class RenjuWidget : public QGLWidget
{


    Q_OBJECT


public:


    RenjuWidget( QWidget * parent = 0 );
    ~RenjuWidget();


protected:


  int posx, posy;


  void initializeGL();
  void paintGL();
  void resizeGL(int width, int height);


  void keyPressEvent( QKeyEvent *e );
  void mousePressEvent(QMouseEvent *e);
};


我的鼠标响应函数是这个:

void RenjuWidget::mousePressEvent(QMouseEvent *e)
{
    if(e->button() == Qt::LeftButton)
    {
        posx = e->x();
        posy = e->y();
        cout<<posx<<"\t"<<posy<<endl;
        paintGL();
       //QMessageBox::information(NULL,QString("%1").arg(posx),QString("%1").arg(posy),QMessageBox::Ok,QMessageBox::NoButton);
        return ;
    }
}


绘制函数是这个:

void RenjuWidget::paintGL()
{
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
    glLoadIdentity();


    if(posx < 300)
    {
        glTranslatef( -1.5,  0.0, -10.0 );


        glBegin( GL_TRIANGLES );
          glColor3f( 1.0, 0.0, 0.0 );
          glVertex3f(  0.0,  1.0,  0.0 );
          glColor3f( 0.0, 1.0, 0.0 );
          glVertex3f( -1.0, -1.0,  0.0 );
          glColor3f( 0.0, 0.0, 1.0 );
          glVertex3f(  1.0, -1.0,  0.0 );
        glEnd();
    }


    if(posx > 300)
    {
        glTranslatef(  1.5,  0.0,  -10.0 );


        glBegin( GL_QUADS );
          glColor3f(1.0 , 0.0 , 0.0);
          glVertex3f( -1.0,  1.0,  0.0 );
          glColor3f(0.0 , 1.0 , 0.0);
          glVertex3f(  1.0,  1.0,  0.0 );
          glColor3f(0.0 , 0.0 , 1.0);
          glVertex3f(  1.0, -1.0,  0.0 );
          glColor3f(1.0 , 1.0 , 1.0);
          glVertex3f( -1.0, -1.0,  0.0 );
        glEnd();
    }


    glLoadIdentity();
}


也就是说,如果鼠标点击坐标<300,在屏幕左侧显示一个三角形,
如果点击坐标>300,右侧显示一个正方形。


但是,在我点击之后,显示内容不会马上改变,必须要失去焦点一次之后才能改变显示内容……
(比如我点击一下界面左侧,内容不改变,我点击一下桌面,内容才发生改变)
请教各位大神

离线ka1980
只看该作者 1楼 发表于: 2012-05-24
鼠标响应函数中,最后再调用一下窗口更新,或者发送窗口更新消息,emit:updateGL();
快速回复
限100 字节
 
上一个 下一个