我有一个包含两个 QGLWidget 的 QMainWindow。小部件使用默认构造函数并且不共享上下文。这些小部件都显示二维数据并允许单击和拖动。
这可以使用 gluUnproject 并在创建的第一个 QGLWidget 上运行良好。单击第二个小部件时,一切都按预期工作。但是,当拖动第二个小部件时,移动并不顺畅。更糟糕的是,一旦第二个小部件被拖动,第一个小部件的 gluUnproject 就会出现与第二个显示器被拖动的方向和距离相关的一些边距。
我尝试在绘图方法开始时、鼠标事件开始时调用 makeCurrent() 以及一个、另一个和两者的组合,但没有看到任何改进。
void MyGLWidget::paintEvent(QPaintEvent *event){
glViewport(0, 0, widgetWidth, widgetHeight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(90,(GLfloat)((widgetWidth/widgetHeight)),0.1f,-zoomMin);
glTranslatef(camera.x, camera.y, camera.zoom);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//[GL Drawing code]
glGetDoublev( GL_MODELVIEW_MATRIX, _modelview );
glGetDoublev( GL_PROJECTION_MATRIX, _projection );
glGetIntegerv( GL_VIEWPORT, _viewport );
}