QOpenGLWidget能作为QGraphicsView的viewport用吗

QOpenGLWidget能作为QGraphicsView的viewport用吗,第1张

QOpenGLWidget能作为QGraphicsView的viewport用

个人在看qwt 中的svgmap样例时,放大缩小的位置的源代码查到在哪里出现,但关于移动却找了一阵,不知道它的源代码在哪里出现,从跟踪情况来看,在void QwtMagnifier::widgetMouseMoveEvent( QMouseEvent mouseEvent )中没有执行(或效果)。

后来查看了QT自带样例:imageviewer,感觉与Scroll相关,由于需要显示,与View相关,暂时就不看GraphicsScence了

在void QGraphicsView::mouseMoveEvent(QMouseEvent event)中,经跟踪发现与下面带码有关:

if (d->dragMode == QGraphicsView::ScrollHandDrag) {

if (d->handScrolling) {

QScrollBar hBar = horizontalScrollBar();

QScrollBar vBar = verticalScrollBar();

QPoint delta = event->pos() - d->lastMouseEventpos();

hBar->setValue(hBar->value() + (isRightToLeft() deltax() : -deltax()));

vBar->setValue(vBar->value() - deltay());

// Detect how much we've scrolled to disambiguate scrolling from

// clicking

++d->handScrollMotions;

}

}

d->mouseMoveEventHandler(event);

}

在OpenGL中确定鼠标点击坐标圆柱体范围内的方法有多种。一种常用的方法是使用投影和反投影矩阵。首先,你需要在渲染圆柱体之前设置投影矩阵,然后在鼠标点击事件中获取当前点击坐标。接下来,使用反投影矩阵将当前点击坐标转换为世界坐标。最后,计算当前点击坐标与圆柱体中心点之间的距离(只看x,y),并判断该距离是否小于圆柱体的半径,还需要在计算距离时考虑圆柱体的高度(只看z)。可以使用如下代码来判断点击坐标是否在圆柱体范围内:

普通算法 void onMouseClick(int x, int y) { // 获取当前点击坐标 glm::vec4 viewport = glm::vec4(0, 0, window_width, window_height); glm::vec3 wincoord = glm::vec3(x, y, 0); glm::vec3 objcoord = glm::unProject(wincoord, view model, projection, viewport); // 计算点击坐标与圆柱体中心点之间的距离 float dx = objcoordx - cylinder_centerx; float dy = objcoordy - cylinder_centery; float distance = sqrt(dx dx + dy dy); // 判断距离是否小于圆柱体半径 if (distance // 点击坐标在圆柱体范围内 std::cout std::cout // 判断点是否在高度范围内 if (objcoordz > cylinder_bottom && objcoordz std::cout

以上就是关于QOpenGLWidget能作为QGraphicsView的viewport用吗全部的内容,包括:QOpenGLWidget能作为QGraphicsView的viewport用吗、opengl如何判定鼠标在物体上、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9477763.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存