【问题标题】:QT Opengl Always Giving Black ScreenQT Opengl总是黑屏
【发布时间】:2018-08-08 10:58:46
【问题描述】:

当我运行时,它总是黑屏。我不明白为什么。也没有错误输出。 这是代码,

主窗口.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QOpenGLWindow>
#include <QSurfaceFormat>
#include <QOpenGLFunctions>
#include <QtOpenGL>
#include <GL/glu.h>

class MainWindow : public QOpenGLWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();


protected:
    virtual void initializeGL();
    virtual void resizeGL(int w, int h);
    virtual void paintGL();
    void resizeEvent(QResizeEvent *event);
    void paintEvent(QPaintEvent *event);

private:
QOpenGLContext *context;
QOpenGLFunctions *openGLFunctions;

};

#endif // MAINWINDOW_H

我尝试了很多其他项目,但总是黑屏。我已经尝试过 QT 文档中的代码,它有效。但在我的代码中,我做不到。

主窗口.cpp

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
{
    setSurfaceType(QWindow::OpenGLSurface);

    QSurfaceFormat format;
    format.setProfile(QSurfaceFormat::CompatibilityProfile);
    format.setVersion(2,1);
    setFormat(format);

    context = new QOpenGLContext;
    context->setFormat(format);
    context->create();
    context->makeCurrent(this);

    openGLFunctions = context->functions();
}

MainWindow::~MainWindow()
{

}

void MainWindow::initializeGL()
{

}

void MainWindow::resizeGL(int w, int h)
{

}

void MainWindow::paintGL()
{
    glClearColor(1.0, 0.0f, 0.0f, 0.0f);
    glClear(GL_COLOR_BUFFER_BIT);

    glBegin(GL_QUADS);
    glVertex2f(-0.5f, -0.5f);
    glVertex2f(0.5f, -0.5f);
    glVertex2f(0.5f, 0.5f);
    glVertex2f(-0.5f, 0.5f);

    glEnd();

    glFlush();
}

void MainWindow::resizeEvent(QResizeEvent *event)
{

}

void MainWindow::paintEvent(QPaintEvent *event)
{
    paintGL();
}

我的问题是什么?

【问题讨论】:

  • 我不完全确定我知道您要做什么,但是...在MainWindow 构造函数中,您创建一个新的QOpenGLContext 并对其进行初始化。但是您不会以任何方式将其与MainWindow 本身相关联。至少我怀疑您正在初始化一个上下文并试图吸引另一个上下文。
  • 我只想在输出中看到绘图的东西。我知道会犯错误,因为我刚开始通过 qt 进行 cpp 和 opengl。
  • 您应该接受@simurg 建议的建议,并从examples 之一开始。然后修改它以做任何你想做的事情。
  • 感谢您的建议。

标签: c++ qt opengl


【解决方案1】:

您的实现缺少initializeGLrenderGlpaintGL 函数。您必须实施它们。尝试先复制示例。

【讨论】:

  • 感谢您的回复。我不明白。你的意思是在 .pro 文件中?这是我的库 = LIBS += -lopengl32 -glu32 -lglut
  • 不,我的意思是你的(即)initializeGL 函数是空的。您必须在此函数中初始化 OpenGL。
  • 我是这样做的,void MainWindow::initializeGL() { QOpenGLFunctions *f = QOpenGLContext::currentContext()->functions(); f->glClearColor(1.0f, 1.0f, 1.0f, 1.0f); f->glClear(GL_COLOR_BUFFER_BIT); } 但还是一样。我错过了什么吗?如果你给我一个示例代码,我很容易理解。我刚开始cpp。
  • 我以为你说 Qt 文档中的代码示例有效。不能只以其中一个为起点,然后根据自己的需要进行修改吗?
  • 感谢所有回复和建议。让我试试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多