在做一个简单的基于Qt的OpenGL绘图的时候,发现通过调用Qt自带类QOpenGLWidget时,只显示背景颜色,不显示绘制的内容。
最初的代码如下:
头文件

#ifndef MYOPENGLWIDGET_H
#define MYOPENGLWIDGET_H#include <QOpenGLWidget>
#include <QOpenGLFunctions>
class myOpenglWidget : public QOpenGLWidget, protected QOpenGLFunctions
{Q_OBJECT
public:explicit myOpenglWidget(QWidget *parent = nullptr);protected:void initializeGL();void resizeGL(int w, int h);void paintGL();
signals:public slots:
};#endif // MYOPENGLWIDGET_H

cpp文件

#include "myopenglwidget.h"
#include <iostream>
#include "glut.h"
using namespace std;
myOpenglWidget::myOpenglWidget(QWidget *parent) : QOpenGLWidget(parent)
{}void myOpenglWidget::initializeGL()
{initializeOpenGLFunctions();glClearColor(1.0, 1.0, 1.0,1.0);
}void myOpenglWidget::resizeGL(int w, int h)
{glViewport(0, 0, (GLsizei)w, (GLsizei)h);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(-1.5,1.5,-1.5,1.5);glMatrixMode(GL_MODELVIEW);glLoadIdentity();
}void myOpenglWidget::paintGL()
{glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glPointSize(10.0);glColor3d(1.0,0.0,0.0);glBegin(GL_POINTS);glVertex3d(0.0, 0.0, 0.0);glEnd();
}

main.cpp

#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}

在ui文件中创建QOpenGLWidget并将其提升为myOpenglWidget,编译上述代码并执行发现背景颜色可以更改,但是中心的红点无法显示。

解决办法

在initializeGL函数中添加opengl版本检查

cout<<glGetString(GL_VERSION)<<endl;

运行程序输出结果为

OpenGL ES 2.0 (ANGLE 2.1.0.8613f4946861)

这就可以发现问题所在,程序直接去调用了OpenGL ES库,而在OpenGL ES库中是不支持glBegin()等函数的,所以我们需要让程序去连接到OpenGL库,这其实也很简单,在mian.cpp调用QApplication之前设置使用OpenGL库的属性,即:

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

QOpenGLWidget空白不显示绘图内容相关推荐

  1. plt.savefig保存图片一片空白或者显示内容不完整、错乱

      原本打算用matplotlib中的savefig实现在某张图片上依据坐标将一系列的彩色点投影到相应位置,然后将完成投影后的图保存下来,预期的效果如下图: 1.图片空白.显示内容不完整   最开始的 ...

  2. excel打开空白不显示内容

    打开excel文档不显示文件内容,一片灰色 找到此文件:HKEY_CLASSES_ROOT\Excel.Sheet.12\shell\Open\command 修改 "默认" 值 ...

  3. vb.net获取服务器中所有数据库名称显示在list,vb listview显示数据库内容,该怎么解决...

    当前位置:我的异常网» VB » vb listview显示数据库内容,该怎么解决 vb listview显示数据库内容,该怎么解决 www.myexceptions.net  网友分享于:2013- ...

  4. flash文本呈现html啥意思,显示flash内容时用的OBJECT和EMBED标签区别介绍

    显示flash内容时用的OBJECT和EMBED标签区别介绍 发布时间:2014-05-13 18:03:29   作者:佚名   我要评论 要在网页中正常显示flash内容,那么页面中必须要有指定f ...

  5. WebBrowser 显示Html内容3点细节技巧

    2019独角兽企业重金招聘Python工程师标准>>> 先上技术内容,后面再感慨几句: 早在(新浪)微博粉丝精灵的评论平台(现在移到微博人气精灵)里,需要有空间来显示新浪微博的内容, ...

  6. matlab 显示绘图工具和停靠图形,4 7 交互式绘图工具ppt

    •4.7 交互式绘图工具 专题四专题四MATLABMATLAB绘图绘图 ""绘图绘图""选项卡选项卡 图形图形窗口绘图工具窗口绘图工具 图形图形窗口菜单和 ...

  7. 彻底解决虚拟机浏览器设置、扩展等花屏空白不显示问题

    问题现象 在我们日常使用VirtualBox.vmware workstation.Hyper-V虚拟机软件的时候,不知不觉我们有没有遇到这种情况,chrome浏览器或者win10/win11自带的E ...

  8. Ubuntu20.04安装微信详细步骤,解决显示异常,无法显示输入内容问题和状态栏问题

    Ubuntu20.04安装微信,解决显示异常,无法输入问题和状态栏问题 最要提示 最终效果,输入窗口正常,应用图标收纳在状态栏中 步骤一:安装wine 步骤二 : 安装字体,解决显示异常[方框]的问题 ...

  9. lxml xpath 爬取并正常显示中文内容

    在使用python爬虫提取中文网页的内容,为了能正确显示中文的内容,在转为字符串时一定要声明编码为utf-8,否则无法正常显示中文,而是显示原编码的字符,并没有正确转换.比如下面这个简单的爬取百度页面 ...

最新文章

  1. SpringSecurity的简单应用(一)
  2. python学习19--生成器
  3. 综合布线管理系统之智能配线架的过去与将来
  4. 重新定义智能平板电脑 第四范式与联想达成战略合作
  5. 经典论文复现 | InfoGAN:一种无监督生成方法
  6. Kaggle新赛 | HuBMAP: 识别人体肾脏组织图像中的肾小球~总奖金 6 万美金
  7. Java第五次作业 ,面向对象高级特性(抽象类与接口)
  8. 卡耐基梅隆大学一些关于人机交互中未来接口人研究
  9. python dbf转excel_如何在python中将dbf转换为csv?
  10. 三个线性同余方程组的计算机解决方案(C程序)
  11. JavaScript开发环境准备
  12. 数字图像处理 调色板图像
  13. Pivotal 任命Lionel Lim为Pivotal公司副总裁兼亚太区常务董事
  14. VisionPro脚本详解
  15. SetTexture()
  16. C#常见错误—未将对象引用设置到对象的实例
  17. C语言实现简易日历(附源码)
  18. python ez setup.py_ez_setup.py安装错误怎么解决
  19. 安卓虚拟键盘_安卓这些年变化多惊人?老玩家的回忆杀
  20. JAVA 给定开始时间和结束时间计算天数

热门文章

  1. 小姐姐都在用的25+技术站点
  2. Python实现将位图描摹为彩色矢量 svg 图片的源代码,Python实现位图转彩色矢量代码
  3. 杰里最新的 授权工具版本【篇】
  4. R语言——Error in plot.window(...) : ‘xlim‘值不能是无限的
  5. vue将毫秒为单位的时间转化成分钟和秒
  6. do while和while的区别
  7. 软件测试师具备的素质_软件测试工程师的所需要的职业素养是什么?
  8. 如何搜索和阅读一篇论文及鉴别论文好坏
  9. 使用u盘安装Red Hat Enterprise 6.0
  10. android app生涯