QT+VS2008+OpenGL(NeHe教程)

奔走中的程序媛 2012-08-08 10:21:22
1.nnWidget.h


#ifndef NNWIDGET_H
#define NNWIDGET_H
#include<qgl.h>
using namespace std;
class nnWidget:public QGLWidget
{
Q_OBJECT
public:
nnWidget(QWidget*parent=0,const char*name=0,bool fs=false);
~nnWidget();
protected:
void initializeGL();
void paintGL();
void resizeGL(int width,int height);
void keyPressEvent(QKeyEvent *e);
protected:
bool fullscreen;
};
#endif
-------------------------------------------------
2.nnWidget.cpp

#include"nnWidget.h"
using namespace std;
nnWidget::nnWidget( QWidget* parent, const char* name, bool fs ):QGLWidget(parent,name)
{
fullscreen=fs;
setGeometry(0,0,640,480);//保存窗口为全屏的状态(大小为640*480)
setCaption("Yvonne's OpenGL Framework");
if (fullscreen)
showFullScreen();
}
nnWidget::~nnWidget(){}
void nnWidget::initializeGL()
{
glShadeModel(GL_SMOOTH);
glClearColor(0.0,0.0,0.0,0.0);
glEnable(GL_DEPTH_TEST);//启用深度测试
glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);//透视修正
}
void nnWidget::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);//清除屏幕和深度缓存
glLoadIdentity();
}
void nnWidget::resizeGL(int width,int height)
{
if(height==0)
{
height=1;//防止height为0
}
glViewport(0,0,(GLint)width,(GLint)height);//重置当前视口
glMatrixMode(GL_PROJECTION);//选择投影矩阵
glLoadIdentity();
gluPerspective(45.0,(GLfloat)width/(GLfloat)height,0.1,100.0);//建立透视投影矩阵
glMatrixMode(GL_MODELVIEW);//选择模型观察矩阵
glLoadIdentity();
}
void nnWidget::keyPressEvent(QKeyEvent *e)
{
switch( e->key() )
{
case Qt::Key_F2:
fullscreen=!fullscreen;
if(fullscreen)
{
showFullScreen();
}
else
{
showNormal();
setGeometry(0,0,640,480);
}
updateGL();
break;
case Qt::Key_Escape:
close();
}
}
----------------------------------------------------------
3.main.cpp

include<qapplication>
#include<qmessagebox>
#include"nnWidget.h"
int main(int argc,char**argv)
{
/*是否使用全屏模式*/
bool fs=false;
QApplication a(argc,argv);
switch( QMessageBox::information( 0,
"开始全屏?",
"是否全屏?",
QMessageBox::Yes,
QMessageBox::No|QMessageBox::Default))
{
case QMessageBox::Yes:
fs=true;
break;
case QMessageBox::No:
fs=false;
break;
}

nnWidget w(0,0,fs);//创建一个对象
a.setMainWidget(&w);//设置应用程序的主窗口部件为W
w.show();

return a.exec();
}

---------------------------------------------------------------
出错提示:
------ 已启动生成: 项目: MYProject, 配置: Debug Win32 ------
1>正在编译...
1>main.cpp
1>d:\研究生\qt\include\qt\qgl.h(5) : warning C4081: 应输入“(”;找到“字符串”
1>d:\program files\microsoft visual studio 9.0\vc\myproject\myproject\main.cpp(24) : error C2039: “setMainWidget”: 不是“QApplication”的成员
1> d:\研究生\qt\src\gui\kernel\qapplication.h(95) : 参见“QApplication”的声明
1>nnWidget.cpp
1>d:\研究生\qt\include\qt\qgl.h(5) : warning C4081: 应输入“(”;找到“字符串”
1>d:\program files\microsoft visual studio 9.0\vc\myproject\myproject\nnwidget.cpp(5) : error C2664: “QGLWidget::QGLWidget(QWidget *,const QGLWidget *,Qt::WindowFlags)”: 不能将参数 2 从“const char *”转换为“const QGLWidget *”
1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
1>d:\program files\microsoft visual studio 9.0\vc\myproject\myproject\nnwidget.cpp(8) : error C3861: “setCaption”: 找不到标识符
1>d:\program files\microsoft visual studio 9.0\vc\myproject\myproject\nnwidget.cpp(40) : error C2027: 使用了未定义类型“QKeyEvent”
1> d:\研究生\qt\src\gui\kernel\qwidget.h(79) : 参见“QKeyEvent”的声明
1>d:\program files\microsoft visual studio 9.0\vc\myproject\myproject\nnwidget.cpp(40) : error C2227: “->key”的左边必须指向类/结构/联合/泛型类型
1>正在生成代码...
1>生成日志保存在“file://d:\Program Files\Microsoft Visual Studio 9.0\VC\MYProject\MYProject\Debug\BuildLog.htm”
1>MYProject - 5 个错误,2 个警告
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
--------------------------------------------------------------------------
根据NeHe教程QT-OpenGL教程第一课写的,不知道哪错了,刚刚接触QT-OpenGL,望高手相助,不胜感激!

...全文
429 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
你把这段代码用QT编绎试试,不过好象你少包括头文件了,比如你没加include "QTGui",另外,你查一下这个类的定义:QGLWidget,里面到底都有什么函数,比如setCaption,如果这个类里没有setCaption,那么你就这么试试:parent->setCaption,同时要注意大小写,QT区别大小写
[/Quote]
d:\program files\microsoft visual studio 9.0\vc\myproject\myproject\nnwidget.cpp(5) : error C2664: “QGLWidget::QGLWidget(QWidget *,const QGLWidget *,Qt::WindowFlags)”: 不能将参数 2 从“const char *”转换为“const QGLWidget *”
1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
-----------------------------------------------------------------------
这个是什么原因呢?
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
你把这段代码用QT编绎试试,不过好象你少包括头文件了,比如你没加include "QTGui",另外,你查一下这个类的定义:QGLWidget,里面到底都有什么函数,比如setCaption,如果这个类里没有setCaption,那么你就这么试试:parent->setCaption,同时要注意大小写,QT区别大小写
[/Quote]
求助求助~!
  • 打赏
  • 举报
回复
查了,原来是版本的问题,QT4好多函数都被取代了,现在只剩一个错误加两个警告了d:\program files\microsoft visual studio 9.0\vc\myproject\myproject\nnwidget.cpp(5) : error C2664: “QGLWidget::QGLWidget(QWidget *,const QGLWidget *,Qt::WindowFlags)”: 不能将参数 2 从“const char *”转换为“const QGLWidget *”
1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
-----------------------------------------------------------------------
这个是什么原因呢?
hdg3707 2012-08-08
  • 打赏
  • 举报
回复
你把这段代码用QT编绎试试,不过好象你少包括头文件了,比如你没加include "QTGui",另外,你查一下这个类的定义:QGLWidget,里面到底都有什么函数,比如setCaption,如果这个类里没有setCaption,那么你就这么试试:parent->setCaption,同时要注意大小写,QT区别大小写

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧