gpt4 book ai didi

c++ - 将 QGLWidget 添加到 QMainWindow

转载 作者:太空宇宙 更新时间:2023-11-04 14:19:12 24 4
gpt4 key购买 nike

我有一个带有 QGraphicsView 的 MainWindow 类,我想将其添加到 MainWindow,以便我能够看到实际发生了什么。我现在要做的就是渲染一个立方体。

主要功能

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}

主窗口构造器

MainWindow::MainWindow( QWidget *parent )
: QMainWindow( parent ),
mUi( new Ui::MainWindow ),
mDisplay( new GLWidget ),
mScene( new QGraphicsScene )
{
mUi->setupUi( this );
//mScene->addWidget( mDisplay );
QGraphicsView *graphicsView = new QGraphicsView;
//QGraphicsView::setupViewport( this );
graphicsView->setViewport( mDisplay );
graphicsView->show();
}

GLWidget::initializeGL

void GLWidget::initializeGL( void )
{
glMatrixMode( GL_COLOR );

glClearColor( 0.0, 0.0, 0.0, 1.0 );

glMatrixMode( GL_MODELVIEW );

glClearDepth( 1.0f );

glEnable( GL_VERTEX_ARRAY );
glEnable( GL_NORMAL_ARRAY );
glEnable( GL_DEPTH_TEST );
glEnable( GL_CULL_FACE );
glShadeModel( GL_SMOOTH );
glEnable( GL_LIGHTING );
glEnable( GL_LIGHT0 );
glEnable( GL_MULTISAMPLE );
static GLfloat lightPosition[ 4 ] = { 0.5, 5.0, 7.0, 1.0 };
glLightfv( GL_LIGHT0, GL_POSITION, lightPosition );

qDebug() << "GL Initialized" << '\n';
}

如您所见,glClearColor 应该将背景设置为黑屏。问题是当我渲染它时,我看到弹出的是两个窗口,而不是一个。虽然 MainWindow 类有一个应该呈现 GLWidget 的窗口框架,但似乎并没有将其添加到窗口框架,而是简单地生成了两个框架以及使用 QGraphicsView 的窗口。两个窗口都只显示白屏;其中之一至少应该显示黑色背景,如 glClearColor 所述。

我在这里做错了什么?

最佳答案

glClearColor 仅设置用于清除屏幕的颜色。要真正清除屏幕,您必须调用 glCear 函数:

glClear(GL_COLOR_BUFFER_BIT);

与 glClearDepth 相同 - 它只设置要清除的深度值。要真正清除它,请使用相同的 glCler 函数。您可以像这样使用一个 glClear 调用来清除颜色缓冲区和深度缓冲区:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

关于c++ - 将 QGLWidget 添加到 QMainWindow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8968018/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com