可颤游庆能是你下的例子要求的QT版本和你安装的QT版本不一致造成的,比如你下的例子茄握要求QT3.X,而你装的磨嫌QT却是Qt4.7.4,所以构造函数有变化造成“No matching function”
qt可以通过QGLWidget运行opengl。QGLWidget继承QWidget,能够直接在里面调用opengl的接口。这个在qt文档里有具体说
明,也有相关例子,所以不赘述了。但是无法在正式软件里面执行,为什么?因为正式软件是用QGraphicsScene这个场景类 *** 作和 *** 作一切
item,而用QGraphicsView将其显示出来,而每一个item都是QGraphicsItem的子类。QGLWidget并不是QGraphicsItem类,我曾经尝试用普通的QWidget类那样,通过proxy来加进QGraphicsItem,但是没有成功。或许有方法,但是没有找到。
于是我放弃了用QGLWidget来 *** 作opengl的打算,寻找直接在QGraphicsItem中 *** 作opengl的方法。通过查看文档和示例代码,找到了这个方法:
1 往qt工程文件里添加opengl以及对应念物猜的lib。
2
对QGraphicsView进行一个三维对话框的指定,代码如蚂明下:
QGLWidget *widget = new
QGLWidget(QGLFormat(QGL::SampleBuffers))
widget->makeCurrent()
QGraphicsView
view
view.setViewport(widget)
上述代码告诉了 QGraphicsView 类当前绘制的对象是支持opengl的。于是所有的场景中的item都将绘制到widget 上。
3
写一个QGraphicsItem的继承类,特别要重写paint函数。代码如下:
void XXX::paint(QPainter
*painter, const QStyleOptionGraphicsItem *option, QWidget
*widget)
{
painter->beginNativePainting()
glColor3f(0.5,1.0,0.2)
glBegin(GL_TRIANGLES)
glVertex3f(100.0,100.0,-100.0)
glVertex3f(150.0, 100.0,
-100.0)
glVertex3f(100.0, 150.0,
-100.0)
glEnd()
painter->endNativePainting()
}
上面这个函数主要是用opengl接口绘制了一个三角形。记住,在opengl绘制之前一定要执行painter->beginNativePainting()以及painter->endNativePainting()这两个语句。
QGraphicsScene、
QGraphicsView和QGraphicsItem的关系可以查阅相关文档,也不仔型赘述了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)